ТЕХНИКА ОПТИМИЗАЦИИ ПРОГРАММ

       

Удаление неиспользуемых присвоений


Если значение, присвоенное переменной, никак не используется в программе, то выполнять операцию присвоения бессмысленно.

Рассмотрим следующий пример: аккуратный программист, следуя советам популярных руководств, явно инициализировал все переменные в момент их объявления, и получилось вот что:

int *p=0;

int a=sizeof(int);

p=malloc(a*1024)

Никто, конечно, не спорит, что инициализация переменных (особенно указателей!) при объявлении – хороший тон программирования. Если разработчик случайно забудет о вызове malloc, нулевой указатель при первом же обращении выбросит исключение, демаскируя ошибку. Напротив, неинициализированные указатели порождают трудноуловимую "блуждающую" ошибку – программа может работать, но нестабильно, искажая "чужие" данные, возможно, при каждом запуске разные. Попробуй-ка, разберись – где зарыт жучок!

Платой за надежность становится "разбухание" и снижение производительности программы, поэтому, оптимизирующие компиляторы, обнаружив, что значение '0', присвоенное переменной 'p', никак не используется в программе, удаляют его:

int *p=0;

int a=sizeof(int);

p=malloc(a*1024)

С этой задачей сполна справляются все три рассматриваемых компилятора – Microsoft Visual C++, Borland C++ и WATCOM.



Содержание раздела