Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.055 c
2-1161779513
dera
2006-10-25 16:31
2006.11.12
Вопрос о форме...


15-1161196483
Kerk
2006-10-18 22:34
2006.11.12
Что делать, если ничто не мотивирует? (-)


15-1161414059
Руслан
2006-10-21 11:00
2006.11.12
Как добавить виртуальный хост в апач?


15-1161933968
boriskb
2006-10-27 11:26
2006.11.12
Сведения о доходах членов Российского правительства.


2-1160925543
Albenous
2006-10-15 19:19
2006.11.12
Загрузка файлов в dll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский