Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, xexe2, Вы писали:
X>>Уважаемый ол, чему же именно равен размер объекта в куче?
J>положительному целому
а поточнее? если учесть поля, функции, и виртуальные функции.
Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, xexe2, Вы писали:
X>>Уважаемый ол, чему же именно равен размер объекта в куче?
J>положительному целому
Неотрицательному целому
The last good thing written in C was Franz Schubert's Symphony No. 9.
Здравствуйте, srggal, Вы писали:
S>Здравствуйте, xexe2, Вы писали:
X>>Уважаемый ол, чему же именно равен размер объекта в куче?
S>Насколько я ошибусь, предположив, что: S>
Здравствуйте, crable, Вы писали:
C>Здравствуйте, jazzer, Вы писали:
J>>Здравствуйте, xexe2, Вы писали:
X>>>Уважаемый ол, чему же именно равен размер объекта в куче?
J>>положительному целому
C>Неотрицательному целому
тогда уважаемый покажите мне такой объект который равен 0 (неотрицательному целому)
Здравствуйте, xexe2, Вы писали:
X>Здравствуйте, crable, Вы писали:
C>>Здравствуйте, jazzer, Вы писали:
J>>>Здравствуйте, xexe2, Вы писали:
X>>>>Уважаемый ол, чему же именно равен размер объекта в куче?
J>>>положительному целому
C>>Неотрицательному целому
X>тогда уважаемый покажите мне такой объект который равен 0 (неотрицательному целому)
предположительно:
new T[0];
The last good thing written in C was Franz Schubert's Symphony No. 9.
Здравствуйте, crable, Вы писали:
C>предположительно: C>new T[0];
Такого не бывает.
Размер бывает нулевым только для пустого базового подобъекта, в виде оптимизации в случаях, когда это допустимо. Для полного объекта размер всегда больше нуля.
Здравствуйте, Глеб Алексеев, Вы писали:
ГА>Здравствуйте, crable, Вы писали:
C>>предположительно: C>>new T[0];
ГА>Такого не бывает. ГА>Размер бывает нулевым только для пустого базового подобъекта, в виде оптимизации в случаях, когда это допустимо. Для полного объекта размер всегда больше нуля.
О, тогда если у объекта в куче есть путой базовый подобъект, то его размер и будет равен 0.
The last good thing written in C was Franz Schubert's Symphony No. 9.
Re[5]: Размер объекта в куче
От:
Аноним
Дата:
28.10.05 13:59
Оценка:
Здравствуйте, crable, Вы писали:
C>Здравствуйте, xexe2, Вы писали:
X>>Здравствуйте, crable, Вы писали:
C>>>Здравствуйте, jazzer, Вы писали:
J>>>>Здравствуйте, xexe2, Вы писали:
X>>>>>Уважаемый ол, чему же именно равен размер объекта в куче?
J>>>>положительному целому
C>>>Неотрицательному целому
X>>тогда уважаемый покажите мне такой объект который равен 0 (неотрицательному целому)
C>предположительно: C>new T[0];
ваше предположение не верно так как sizeof возвращает 1!
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, crable, Вы писали:
C>>Здравствуйте, xexe2, Вы писали:
X>>>Здравствуйте, crable, Вы писали:
C>>>>Здравствуйте, jazzer, Вы писали:
J>>>>>Здравствуйте, xexe2, Вы писали:
X>>>>>>Уважаемый ол, чему же именно равен размер объекта в куче?
J>>>>>положительному целому
C>>>>Неотрицательному целому
X>>>тогда уважаемый покажите мне такой объект который равен 0 (неотрицательному целому)
C>>предположительно: C>>new T[0];
А>ваше предположение не верно так как sizeof возвращает 1!
sizeof чего? без new ты массив нулевой длины не сделаешь, а если через new, то как ты к нему sizeof применишь?
А>ps: vc6
The last good thing written in C was Franz Schubert's Symphony No. 9.
Re[7]: Размер объекта в куче
От:
Аноним
Дата:
28.10.05 14:08
Оценка:
Здравствуйте, crable, Вы писали:
C>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, crable, Вы писали:
C>>>Здравствуйте, xexe2, Вы писали:
X>>>>Здравствуйте, crable, Вы писали:
C>>>>>Здравствуйте, jazzer, Вы писали:
J>>>>>>Здравствуйте, xexe2, Вы писали:
X>>>>>>>Уважаемый ол, чему же именно равен размер объекта в куче?
J>>>>>>положительному целому
C>>>>>Неотрицательному целому
X>>>>тогда уважаемый покажите мне такой объект который равен 0 (неотрицательному целому)
C>>>предположительно: C>>>new T[0];
А>>ваше предположение не верно так как sizeof возвращает 1!
C>sizeof чего? без new ты массив нулевой длины не сделаешь, а если через new, то как ты к нему sizeof применишь?
А>>ps: vc6
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, crable, Вы писали:
C>>Здравствуйте, Аноним, Вы писали:
А>>>Здравствуйте, crable, Вы писали:
C>>>>Здравствуйте, xexe2, Вы писали:
X>>>>>Здравствуйте, crable, Вы писали:
C>>>>>>Здравствуйте, jazzer, Вы писали:
J>>>>>>>Здравствуйте, xexe2, Вы писали:
X>>>>>>>>Уважаемый ол, чему же именно равен размер объекта в куче?
J>>>>>>>положительному целому
C>>>>>>Неотрицательному целому
X>>>>>тогда уважаемый покажите мне такой объект который равен 0 (неотрицательному целому)
C>>>>предположительно: C>>>>new T[0];
А>>>ваше предположение не верно так как sizeof возвращает 1!
C>>sizeof чего? без new ты массив нулевой длины не сделаешь, а если через new, то как ты к нему sizeof применишь?
А>>>ps: vc6
А>sizeof(*(new T[0]))
IMHO
sizeof(*(new T[n])) == sizeof(T)
The last good thing written in C was Franz Schubert's Symphony No. 9.
Здравствуйте, Глеб Алексеев, Вы писали:
ГА>Здравствуйте, crable, Вы писали:
C>>предположительно: C>>new T[0];
ГА>Такого не бывает. ГА>Размер бывает нулевым только для пустого базового подобъекта, в виде оптимизации в случаях, когда это допустимо. Для полного объекта размер всегда больше нуля.
объясните пожалйста что вы имели ввиду или еще лучше кусочек кода
ну вроде и все:)
Re[9]: Размер объекта в куче
От:
Аноним
Дата:
28.10.05 14:17
Оценка:
Здравствуйте, Глеб Алексеев, Вы писали:
ГА>Здравствуйте, <Аноним>, Вы писали:
А>>sizeof(*(new T[0])) ГА>Попробуй sizeof(*(new T[1000000]))
Здравствуйте, xexe2, Вы писали:
X>Здравствуйте, Глеб Алексеев, Вы писали:
ГА>>Здравствуйте, crable, Вы писали:
C>>>предположительно: C>>>new T[0];
ГА>>Такого не бывает. ГА>>Размер бывает нулевым только для пустого базового подобъекта, в виде оптимизации в случаях, когда это допустимо. Для полного объекта размер всегда больше нуля.
X>объясните пожалйста что вы имели ввиду или еще лучше кусочек кода
struct Empty {};
struct foo: public Empty // компилятор может не выделять в foo место под Empty
{
int a;
};
struct bar
{
Empty e; // здесь место для e выделяется.
};
Правда, я где-то натыкался на информацию о том, что на самом деле выполнять оптимизацию для пустых базовых классов нельзя.
Ну, вроде как, в стандарте ошибка была.
The last good thing written in C was Franz Schubert's Symphony No. 9.
Здравствуйте, xexe2, Вы писали:
X>Уважаемый ол, чему же именно равен размер объекта в куче?
Во-первых. Размер объекта всегда равен sizeof(этот_объект), вне зависимости — в куче он, на стеке или статический.
То, что менеджер кучи тратит чуть больше памяти, чем этот sizeof (служебная информация, выравнивание, минимальный размер блока и его гранулярность) — предмет для отдельного разговора.
Во-вторых, размер объекта не может быть нулевым: это нужно для уникальности адресов объектов в массиве. (Как известно, объекты обладают поведением, состоянием и идентичностью; в С++ идентичность обеспечивается уникальными адресами).
Если у объекта есть пустая база, то компилятор может сэкономить и разместить члены объекта, начиная с нулевого смещения.
В-третьих, можно запросить массив нулевого размера на куче: new Type[0]; причём этот массив будет иметь ненулевой указатель.
Зачем так сделано — нужно подумать или порыться в Стандарте.
В С++ есть 3 вида валидных указателей:
— нулевой (нельзя разыменовывать, неприменима адресная арифметика, приводится к false)
— указатель на существующий объект, в т.ч. в составе массива (можно разыменовывать, применима адресная арифметика, приводится к true)
— указатель за концом массива (нельзя разыменовывать, применима адресная арифметика, приводится к true)
new T[0], очевидно, даёт третью разновидность.
C>Правда, я где-то натыкался на информацию о том, что на самом деле выполнять оптимизацию для пустых базовых классов нельзя. C>Ну, вроде как, в стандарте ошибка была.
ААААА!
Я в панике!
Если ты помнишь ссылку или она где-то у тебя осталась, то дай мне ее пожалуйста!
Нам через неделю проект сдавать, а у empty base class optimisation используется очень активно!