Главная страница
    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.042 c
6-1151062890
antoxa2005
2006-06-23 15:41
2006.11.12
Подскажите, как решается задача "связки" БД сайта (MySQL) c ,базо


2-1161806369
Kolan
2006-10-25 23:59
2006.11.12
Ошибка "CommandText does not return a result set".


15-1161345778
vidiv
2006-10-20 16:02
2006.11.12
isa firewall client от isa 2004


15-1161361753
ArtemESC
2006-10-20 20:29
2006.11.12
Архитектура NET


15-1161764920
Rentgen
2006-10-25 12:28
2006.11.12
Proxy server на Delphi/BC++





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский