|
|
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
Недавно поднимался вопрос, и был пример наподобии class MyClass { int val; virtual ~MyClass() {} }; ... sizeof(MyClass) == 8 // Ладно, пусть еще 4 байта появляются из-за указателя на таблицу виртуальных методов. Почему только, если int заменить на char, sizeof тоже будет 8 (выравнивание по границе слова?) А вот вопрос: class AnotherStupidClass { static int val; }; ... int AnotherStupidClass::val = 0; ... ПОЧЕМУ sizeof(AnotherStupidClass) == 1? Я догадываюсь, что сама статическая переменная размещается при повторном объявлении, выражаясь досовским языком, в DS. Но как указатель в классе может быть всего из 1 байта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 06:55 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
В самом обекте класса неи никакого указателя. Там вообще ничего нет. Но объект класса должен быть размещен в памяти, чтобы было с чем в ссылквх и указателях работать. А статическая переменная класса дкйствительно болтается в статической области памяти ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 09:39 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
TopSpace(выравнивание по границе слова?) Угу. Двойного слова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 10:04 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
2blinded: а почему тогда размер 1 байт, а не 0? 2Akh: т.е. 8 байт? но варьируя поля класса, мне попадались и sizeof"ы в 8, 12 байт.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 10:10 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
TopSpace2blinded: а почему тогда размер 1 байт, а не 0? По СТАНДАРТУ, класс не может иметь 0 размер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 10:21 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
TopSpace2Akh: т.е. 8 байт? но варьируя поля класса, мне попадались и sizeof"ы в 8, 12 байт.... Слово (WORD) - 2 байта. Двойное слово (DWORD) - 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 10:22 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
TopSpace ПОЧЕМУ sizeof(AnotherStupidClass) == 1? Я догадываюсь, что сама статическая переменная размещается при повторном объявлении, выражаясь досовским языком, в DS. Но как указатель в классе может быть всего из 1 байта? Никакой объект никакого класса не может быть размером 0 байт. Иначе у тебя не будет соблюдаться правило уникальности идентификации каждого объекта в программе (с помощью его адреса). Минимальный размер объекта - один байт. Это прописано в стандарте и является стандартным и ожидаемым поведением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 20:19 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
Если пустой класс дополняется идентифицирующим байтом, то благодаря какому механимзу мы можем создавать больше 256 экземпляров класса??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 07:25 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
ты сам тр прнял что сказал? Класс тут вообще не причем, у него - класса размера нет, размер есть только у объекта. Вот создаешь ты в своей программе объект некоторого класса, это объект должен быть расположен в памяти, даже если в нем ничего нет, поскольку язык требует чтобы была возможность создать ссылку на объект некоторого класса и взять его адрес. Сделать этот адрес константным тоже нельзя, поскольку требуется чтобы адреса двкх разных объектов различались. Вот компилятор и клепает объекты размером в 1 байт, меньше не может ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 09:59 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
TopSpaceЕсли пустой класс дополняется идентифицирующим байтом, то благодаря какому механимзу мы можем создавать больше 256 экземпляров класса??? Идентификация объекта происходит по адресу этого самого байта, а не по самому байту. Читайте внимательнее пост MasterZiv. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 10:03 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
blindedу него - класса размера нет, размер есть только у объекта. Определи класс и попроси по нему sizeof ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 10:08 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
TopSpaceЕсли пустой класс дополняется идентифицирующим байтом, то благодаря какому механимзу мы можем создавать больше 256 экземпляров класса??? Занимающим место. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 10:14 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
Т.е. в этот баластный байт ничего не записывается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 11:15 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) blindedу него - класса размера нет, размер есть только у объекта. Определи класс и попроси по нему sizeof Не путайте божий дар с яичницей. это будет размер объкта класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 11:31 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
TopSpaceТ.е. в этот баластный байт ничего не записывается? Во всяком случае, ничего полезного программисту. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 11:53 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
blinded Gluk (Kazan) blindedу него - класса размера нет, размер есть только у объекта. Определи класс и попроси по нему sizeof Не путайте божий дар с яичницей. это будет размер объкта класса. не желаю вести пустые теологические споры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 12:05 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
Не дает покоя этот баластный байт ;-) Простой опыт class EmptyClass { }; EmptyClass obj; char b = *(char*)&obj; //b == 0 Может и совпадение, а может специально обнуляется.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 12:36 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
имхо sizeof(ClassName) вернет число байт, которые будет занимать в памяти экземпляр класса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 12:38 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
TopSpaceНе дает покоя этот баластный байт ;-) Простой опыт class EmptyClass { }; EmptyClass obj; char b = *(char*)&obj; //b == 0 Может и совпадение, а может специально обнуляется.. ну правильно, пока вы не вызвали конструктор EmptyClass, obj = NULL, хотя может быть так, что указатель obj разместится в памяти в том месте, где были раньше какие-то данные, и будет не равен NULL, но все равно в таком случае он будет ссылаться на какое-то произвольное место в памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 12:43 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
TopSpaceНе дает покоя этот баластный байт ;-) Простой опыт class EmptyClass { }; EmptyClass obj; char b = *(char*)&obj; //b == 0 Может и совпадение, а может специально обнуляется.. Может кто-то и знает, но толку от этого нет. Врядли вы его будете использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 12:44 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
Gr4veимхо sizeof(ClassName) вернет число байт, которые будет занимать в памяти экземпляр класса Так и есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 12:45 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
Gr4ve TopSpaceНе дает покоя этот баластный байт ;-) Простой опыт class EmptyClass { }; EmptyClass obj; char b = *(char*)&obj; //b == 0 Может и совпадение, а может специально обнуляется.. ну правильно, пока вы не вызвали конструктор EmptyClass, obj = NULL, хотя может быть так, что указатель obj разместится в памяти в том месте, где были раньше какие-то данные, и будет не равен NULL, но все равно в таком случае он будет ссылаться на какое-то произвольное место в памяти. А, нет, сорри, не разглядел Мой пост не имеет смысла, так как вы объявляете EmptyClass obj, а не EmptyClass *obj. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 12:45 |
|
||
|
sizeof класса с различным контентом
|
|||
|---|---|---|---|
|
#18+
TopSpace...Может и совпадение, а может специально обнуляется.. немного насторожила данная фраза... рекомендую считать, что СПЕЦИАЛЬНО НИКТО и НИЧЕГО обнулять НЕ будет !!! Исключением является а) дебаг режим б) секьюрити контент выполнения (после отработки) (круглый) 2 ALL Не плохой пример подкинул - столько копий.. А лбы как трещат !!! гы... Мужики, предлагаю за слова не цепляться. Ответы тут прозвучали верные. Одын байи нужён для хоть "чаво та" чтобы отработала правильно аллокация памяти и с указателями мона было оперировать... предлагаю закрыть данную тему, если принципиальных различий нема... Класс-Объект предлагаю не цепляться. 99% народа тут я думаю понимают разницу и теоретически и практически... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2006, 16:56 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=330&tid=2030316]: |
0ms |
get settings: |
12ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 213ms |
| total: | 385ms |

| 0 / 0 |
