![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
неиспользуемое в классе
ymy1 © (2006-10-29 13:36:00)Глупый вопрос. Допустим есть у меня некий класс, в котором например десять функций и пять процедур. Я начинаю использовать класс, и буду использовать только три процедуры и пять функций. Компилятор откомпилирует в код все функции и процедуры класса или только используемые?
Спасибо!
Anatoly Podgoretsky (2006-10-29 17:22:00) [1]> Ответ на сообщение [4]
> косвенные обращения по индексу
>Что имеется в виду ?
Например обращение в ассемблерном коде [eax+n], раньше в самой RTL таких
кусков было много.
Percent (2006-10-29 16:32:00) [2]Я считал что метод - это, как раз функция или процедура.
В ООП нет понятий "процедура" и "функция"...
Оптимизатор удалит только те участки откомпилированного кода, которые однозначно не будут использованы ни при каких условиях*. То же относится и к переменным и прочим возможным излишествам...
Все остальное - оставит.
* Условия ограничены синтаксисом языка Delphi.
guav (2006-10-29 16:01:00) [3]> type
> TObj = class(TObject)
> private
> FA: Integer;
> FB: Integer;
> procedure SetA(const Value: Integer);
> procedure SetB(const Value: Integer);
> public
> property A: Integer read FA write SetA;
> property B: Integer read FB write SetB;
> end;
Даже не так можно:
type
TObj = class(TObject)
public
FA: Integer;
FB: Integer;
procedure SetA(const Value: Integer);
procedure SetB(const Value: Integer);
property A: Integer read FA write SetA;
property B: Integer read FB write SetB;
end;
Всё равно SetB и FB будут выброшены.
guav (2006-10-29 15:53:00) [4]> [6] DrPass © (29.10.06 15:46)
> и кастрированию компоновщиком не подвергается
таки подвергается.
поставь breakpoint в SetB и в рантайме он окажется недействительным, т.к. код SetB выбросится.
program Project2;
{$APPTYPE CONSOLE}
type
TObj = class(TObject)
private
FA: Integer;
FB: Integer;
procedure SetA(const Value: Integer);
procedure SetB(const Value: Integer);
public
property A: Integer read FA write SetA;
property B: Integer read FB write SetB;
end;
{ TObj }
procedure TObj.SetA(const Value: Integer);
begin
FA := Value;
end;
procedure TObj.SetB(const Value: Integer);
begin
FB := Value;
end;
begin
with TObj.Create do
try
A := 0;
finally
Free;
end;
end.
GrayFace (2006-10-29 15:46:00) [5]Anatoly Podgoretsky © (29.10.06 13:40) [1]
Если функции и процедуры, то выкинет, если методы то нет.
Расшифруйте терминологию, plz. Я считал что метод - это, как раз функция или процедура.
Anatoly Podgoretsky © (29.10.06 15:01) [3]
Не забываем про bpl, про косвенные обращения по индексу. Ладно второе
извращение, а с первым то как.
Косвенное обращение по индексу к [u]статическому[/u] методу?
DrPass (2006-10-29 15:46:00) [6]
> предполагаю что в этом случае выбрасываются только лишние
> private члены
Лишние private-члены выбрасываются оптимизатором в любом случае, о чем он честно пишет ахтунг. В остальном класс - целостная и неделимая структурная единица, и кастрированию компоновщиком не подвергается
guav (2006-10-29 15:43:00) [7]> [3] Anatoly Podgoretsky © (29.10.06 15:01)
> Не забываем про bpl
Про bpl не подумал. не хочу проверять, но предполагаю что в этом случае выбрасываются только лишние private члены и лишние фунцкции, не упомянутые в interface.
В общем, компилятор выкидывает только то что точно не используется.
Выбрасывание мне однажды помогло найти ошибку, когда нужные published члены были выброшены. Ошибка была в не-наследовании от TPersistent
> косвенные обращения по индексу
Что имеется в виду ?
Anatoly Podgoretsky (2006-10-29 15:01:00) [8]> Ответ на сообщение [2]
Уверен?
Не забываем про bpl, про косвенные обращения по индексу. Ладно второе
извращение, а с первым то как.
guav (2006-10-29 14:01:00) [9]> [0] ymy1 (29.10.06 13:36)
Компилируется весь код. Однако, неиспользуемое выбрасываются.
Кроме published членов и не-статических методов, компилятор не может знать, используются ли эти, или нет.
Anatoly Podgoretsky (2006-10-29 13:40:00) [10]> Ответ на сообщение [0]
Если функции и процедуры, то выкинет, если методы то нет.