Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.12;
Скачать: CL | DM;

Вниз

неиспользуемое в классе   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.065 c
15-1161346025
McSimm
2006-10-20 16:07
2006.11.12
Дабы не офтопить:


2-1162043286
uhhh
2006-10-28 17:48
2006.11.12
копирование файла


1-1159697211
race1
2006-10-01 14:06
2006.11.12
Изменение размера формы за краешек


15-1161680315
ANB
2006-10-24 12:58
2006.11.12
Баянище


5-1142506194
Ice
2006-03-16 13:49
2006.11.12
Перекрытый Paint.