Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Приоритет типов..


Автор: PuLN 3.9.2006, 17:12
есть ли разница,каким по счету указывать типа данных при инициализации?
есть ли значение для освобождения памяти?

Автор: Greeen 3.9.2006, 17:15
PuLN, нифига себе сказал!!  smile  поясни вопрос?  smile 

Автор: PuLN 3.9.2006, 17:31
ну вот чего то взбрело мне в голову...
вот смотри,объявляешь ты переменные в какой-нибудь прогаммке простенькой,там
все подряд,напимер:

int c;
char mass[10]={1,2,3,4};
double sum;

как под них освобождается память?
подряд?или сращу для всех?

Автор: En_t_end 3.9.2006, 17:40
PuLN, 
в стековом порядке.

Автор: PuLN 3.9.2006, 17:46
значит,есть разница,какой по порядку сделана инициализация....интересно.. smile 

Автор: Daevaorn 3.9.2006, 17:53
PuLN, разницы нет.

Добавлено @ 18:03 
Для не встроенных типов вызовутся деструкторы, а потом одной asm операцией изменится указатель вершины стека.

Автор: MAKCim 3.9.2006, 18:21
Цитата

как под них освобождается память?
подряд?или сращу для всех?

в данном случае, имхо, сразу для всех (изменяется указатель стека на сумарный размер всех данных)
если бы были объекты не POD типа
то вызывались бы деструкторы в порядке, обратном их определению

Автор: PuLN 3.9.2006, 18:55
ага,ясно,спасибо!

Автор: rMaveric 3.9.2006, 19:56
Зависит от компилятора и опций оптимизации.

Но желательно объявлять переменные в порядке уменьшения размера занимаемой ими памяти. Тоесть в твоем примере лучше объявить так: 

Код

char mass[10]={1,2,3,4};
double sum;
int c;


Особенно сильно это играет роль в структурах. Но если не ошибаюсь большинство оптимизаторов умеют распределять в памяти более-менее грамотно и не создается больших дыр, но всеравно лучше на всяк случай предерживаться правил, да и зачастую оптимизацией лучше пренебречь автоматической в пользу ручной smile

Автор: NextAlex 4.9.2006, 10:26
Все переменные всегда удаляются в порядке обратном их созданию, т.е. если переменные объявлялись
Код

int c;
char mass[10]={1,2,3,4};
double sum;

то удаляться они будут вот так
  • sum
  • mass
  • c
и только так.

Автор: PuLN 4.9.2006, 13:28
ну да,в стековом...первый зашел,последний вышел..

Автор: Sceptik 4.9.2006, 15:07
PuLN, читай про выравнивание в структруах (классах). При простом Объявлении разницы нет.

Автор: knut 5.9.2006, 09:43
PuLN, 
Цитата

ну да,в стековом...первый зашел,последний вышел.. 

ето смотря как стек организован .

Добавлено @ 09:45 
извиняюсь за (ето) это 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)