Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
Внизнеиспользуемое в классе Найти похожие ветки
← →
ymy1 (2006-10-29 13:36) [0]Глупый вопрос. Допустим есть у меня некий класс, в котором например десять функций и пять процедур. Я начинаю использовать класс, и буду использовать только три процедуры и пять функций. Компилятор откомпилирует в код все функции и процедуры класса или только используемые?
Спасибо!
← →
Anatoly Podgoretsky © (2006-10-29 13:40) [1]> Ответ на сообщение [0]
Если функции и процедуры, то выкинет, если методы то нет.
← →
guav © (2006-10-29 14:01) [2]> [0] ymy1 (29.10.06 13:36)
Компилируется весь код. Однако, неиспользуемое выбрасываются.
Кроме published членов и не-статических методов, компилятор не может знать, используются ли эти, или нет.
← →
Anatoly Podgoretsky © (2006-10-29 15:01) [3]> Ответ на сообщение [2]
Уверен?
Не забываем про bpl, про косвенные обращения по индексу. Ладно второе
извращение, а с первым то как.
← →
guav © (2006-10-29 15:43) [4]> [3] Anatoly Podgoretsky © (29.10.06 15:01)
> Не забываем про bpl
Про bpl не подумал. не хочу проверять, но предполагаю что в этом случае выбрасываются только лишние private члены и лишние фунцкции, не упомянутые в interface.
В общем, компилятор выкидывает только то что точно не используется.
Выбрасывание мне однажды помогло найти ошибку, когда нужные published члены были выброшены. Ошибка была в не-наследовании от TPersistent
> косвенные обращения по индексу
Что имеется в виду ?
← →
GrayFace © (2006-10-29 15:46) [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) [6]
> предполагаю что в этом случае выбрасываются только лишние
> private члены
Лишние private-члены выбрасываются оптимизатором в любом случае, о чем он честно пишет ахтунг. В остальном класс - целостная и неделимая структурная единица, и кастрированию компоновщиком не подвергается
← →
guav © (2006-10-29 15:53) [7]> [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.
← →
guav © (2006-10-29 16:01) [8]> 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 будут выброшены.
← →
Percent (2006-10-29 16:32) [9]Я считал что метод - это, как раз функция или процедура.
В ООП нет понятий "процедура" и "функция"...
Оптимизатор удалит только те участки откомпилированного кода, которые однозначно не будут использованы ни при каких условиях*. То же относится и к переменным и прочим возможным излишествам...
Все остальное - оставит.
* Условия ограничены синтаксисом языка Delphi.
← →
Anatoly Podgoretsky © (2006-10-29 17:22) [10]> Ответ на сообщение [4]
> косвенные обращения по индексу
>Что имеется в виду ?
Например обращение в ассемблерном коде [eax+n], раньше в самой RTL таких
кусков было много.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.053 c