Предположим у меня есть дерево исходников и где-то в недрах есть такое описание
struct xxx {
int a;
int b;
short c;
struct yyy *d;
double g;
};
хочется узнать sizeof(struct xxx), но быстро - не пересобирая всего дерева.
Есть ли програмулька, которая позволяет это сделать?
Sizeof utility
Модератор: Модераторы разделов
-
flook
- Сообщения: 585
- Статус: Просто flook
Sizeof utility
В каждом из нас спит гений... и с каждым днем все крепче...
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Sizeof utility
Первое, что приходит в голову -- написать скриптик ( perl | (bash & (sed | awk) ), который ищет определение структуры по её имени, подставляет это определение в сишный исходник-пустышку с чем-то типа printf("%u", sizeof(x)); и компилит.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
oav
- Бывший модератор
- Сообщения: 296
Re: Sizeof utility
(t.t @ Friday, 13 August 2004, 10:58) писал(а):Первое, что приходит в голову -- написать скриптик ( perl | (bash & (sed | awk) ), который ищет определение структуры по её имени, подставляет это определение в сишный исходник-пустышку с чем-то типа printf("%u", sizeof(x)); и компилит.
Это смотря какая задача стоит (автор не точно описал), если интересует статический размер структуры - т.е. размер для размещения ее в памяти - этот размер известен на этапе компиляции (sizeof - оператор времени компиляции), или реальный размер - как видим, там есть указатель, который указывает на yyyy которая тоже имеет свой размер. В последней случае sizeof не прокатит есессна
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Sizeof utility
А рекурсия на что? В скрипте просто прописать самовызов для таких вот случаев.(oav @ Friday, 13 August 2004, 11:42) писал(а):Это смотря какая задача стоит (автор не точно описал), если интересует статический размер структуры - т.е. размер для размещения ее в памяти - этот размер известен на этапе компиляции (sizeof - оператор времени компиляции), или реальный размер - как видим, там есть указатель, который указывает на yyyy которая тоже имеет свой размер. В последней случае sizeof не прокатит есессна
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: Sizeof utility
(oav @ Friday, 13 August 2004, 11:42) писал(а):(t.t @ Friday, 13 August 2004, 10:58) писал(а):Первое, что приходит в голову -- написать скриптик ( perl | (bash & (sed | awk) ), который ищет определение структуры по её имени, подставляет это определение в сишный исходник-пустышку с чем-то типа printf("%u", sizeof(x)); и компилит.
Это смотря какая задача стоит (автор не точно описал), если интересует статический размер структуры - т.е. размер для размещения ее в памяти - этот размер известен на этапе компиляции (sizeof - оператор времени компиляции), или реальный размер - как видим, там есть указатель, который указывает на yyyy которая тоже имеет свой размер. В последней случае sizeof не прокатит есессна
Вообще-то я явно сказал - ДО КОМПИЛЯЦИИ. И потом - sizeof(struct foo*) определен даже если и не знать что из себя представляет struct foo.
В каждом из нас спит гений... и с каждым днем все крепче...
-
oav
- Бывший модератор
- Сообщения: 296
Re: Sizeof utility
(t.t @ Friday, 13 August 2004, 13:18) писал(а):А рекурсия на что? В скрипте просто прописать самовызов для таких вот случаев.(oav @ Friday, 13 August 2004, 11:42) писал(а):Это смотря какая задача стоит (автор не точно описал), если интересует статический размер структуры - т.е. размер для размещения ее в памяти - этот размер известен на этапе компиляции (sizeof - оператор времени компиляции), или реальный размер - как видим, там есть указатель, который указывает на yyyy которая тоже имеет свой размер. В последней случае sizeof не прокатит есессна
А если переменная полиморфная?
(flook @ Friday, 13 August 2004, 13:41) писал(а):Вообще-то я явно сказал - ДО КОМПИЛЯЦИИ. И потом - sizeof(struct foo*) определен даже если и не знать что из себя представляет struct foo.
oknp sizeof катит. размер указателя чаще всего 4 байта
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: Sizeof utility
(oav @ Saturday, 14 August 2004, 16:54) писал(а):(t.t @ Friday, 13 August 2004, 13:18) писал(а):А рекурсия на что? В скрипте просто прописать самовызов для таких вот случаев.(oav @ Friday, 13 August 2004, 11:42) писал(а):Это смотря какая задача стоит (автор не точно описал), если интересует статический размер структуры - т.е. размер для размещения ее в памяти - этот размер известен на этапе компиляции (sizeof - оператор времени компиляции), или реальный размер - как видим, там есть указатель, который указывает на yyyy которая тоже имеет свой размер. В последней случае sizeof не прокатит есессна
А если переменная полиморфная?
Какая разница. Если под мой объект выделена память, то хоть она трижды полиморфная - но _фиксированный_ размер она в памяти занимает.
Чаще всего - это почти всегда, а почти всегда - это всегда за исключением множества меры 0?
Лично я еще не видел, чтоб на 386 компах xxx* разворачивался во что либо кроме .long...
В каждом из нас спит гений... и с каждым днем все крепче...
-
oav
- Бывший модератор
- Сообщения: 296
Re: Sizeof utility
[quote=flook,Monday, 16 August 2004, 13:25]
А если переменная полиморфная?
[quote]
[quote]
Какая разница. Если под мой объект выделена память, то хоть она трижды полиморфная - но _фиксированный_ размер она в памяти занимает.
[quote]
мм это я отвечал на рекурсию в перле. т.е. еслиб надо было реальный размер узнать в динамике - то указатель может указывать на производный класс (структуру) и реальный тип неизвестен. такаяже фигня если член структуры void*.
[quote]
Чаще всего - это почти всегда, а почти всегда - это всегда за исключением множества меры 0?
Лично я еще не видел, чтоб на 386 компах xxx* разворачивался во что либо кроме .long...
[quote]
мм...чаще всего - это пока у 99.99% компьютеров 32битная архитектура, а DOS системы мертвы (с их near указателеми). long тут не причем. совсем
[quote]
А если переменная полиморфная?
[quote]
[quote]
Какая разница. Если под мой объект выделена память, то хоть она трижды полиморфная - но _фиксированный_ размер она в памяти занимает.
[quote]
мм это я отвечал на рекурсию в перле. т.е. еслиб надо было реальный размер узнать в динамике - то указатель может указывать на производный класс (структуру) и реальный тип неизвестен. такаяже фигня если член структуры void*.
[quote]
Чаще всего - это почти всегда, а почти всегда - это всегда за исключением множества меры 0?
Лично я еще не видел, чтоб на 386 компах xxx* разворачивался во что либо кроме .long...
[quote]
мм...чаще всего - это пока у 99.99% компьютеров 32битная архитектура, а DOS системы мертвы (с их near указателеми). long тут не причем. совсем
[quote]
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: Sizeof utility
Ладно. Закончили состязание "кто выше писает на стенку".
Значит никто не знает...
Жаль :bestbook:
Значит никто не знает...
Жаль :bestbook:
В каждом из нас спит гений... и с каждым днем все крепче...
-
oav
- Бывший модератор
- Сообщения: 296
Re: Sizeof utility
(flook @ Tuesday, 17 August 2004, 15:06) писал(а):Ладно. Закончили состязание "кто выше писает на стенку".
Значит никто не знает...![]()
Жаль :bestbook:
ну да. задача нестандартная уж больно. а зачем вам это, если не секрет?
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: Sizeof utility
Не секрет. Я kernel-developer-ом работаю B) , а текущая задача требует знаний размеров многих структур, в том числе и "нестандартных". А пересобирать ядро из-за каждой структуры или бегать по коду собирая все то, что они там в себе содержат - не клёво...
В каждом из нас спит гений... и с каждым днем все крепче...
-
oav
- Бывший модератор
- Сообщения: 296
Re: Sizeof utility
(flook @ Wednesday, 18 August 2004, 13:28) писал(а):
Не секрет. Я kernel-developer-ом работаю B) , а текущая задача требует знаний размеров многих структур, в том числе и "нестандартных". А пересобирать ядро из-за каждой структуры или бегать по коду собирая все то, что они там в себе содержат - не клёво...
that cool :thumbsup: . ну почему именно сама sizeof не подходит?
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: Sizeof utility
(oav @ Wednesday, 18 August 2004, 12:59) писал(а):that cool :thumbsup: . ну почему именно сама sizeof не подходит?
Подходит, но для того чтоб ее попользовать нужно собрать ядро или выдернуть нужную структуру из сырцов, вставить ее в свою мини-прожку и там сделать sizeof, а если в это структуре есть свои структуры, то это надо еще их искать, что утомляет. Потом размер структуры зависит от config опций... Все это хоцца автоматизировать. Эх...
В каждом из нас спит гений... и с каждым днем все крепче...
-
oav
- Бывший модератор
- Сообщения: 296
Re: Sizeof utility
(flook @ Wednesday, 18 August 2004, 14:40) писал(а):(oav @ Wednesday, 18 August 2004, 12:59) писал(а):that cool :thumbsup: . ну почему именно сама sizeof не подходит?
Подходит, но для того чтоб ее попользовать нужно собрать ядро или выдернуть нужную структуру из сырцов, вставить ее в свою мини-прожку и там сделать sizeof, а если в это структуре есть свои структуры, то это надо еще их искать, что утомляет. Потом размер структуры зависит от config опций... Все это хоцца автоматизировать. Эх...
ой нехорошой дорогой идете товришь имхо
удачи
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: Sizeof utility
ой нехорошой дорогой идете товришь имхокак-то все это пахнет большими проблемами на интеграции и поддержке в будущем...
удачи
Спасибо :thumbsup:
В каждом из нас спит гений... и с каждым днем все крепче...