Sizeof utility

Модератор: Модераторы разделов

Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Sizeof utility

Сообщение flook »

Предположим у меня есть дерево исходников и где-то в недрах есть такое описание

struct xxx {
int a;
int b;
short c;
struct yyy *d;
double g;
};

хочется узнать sizeof(struct xxx), но быстро - не пересобирая всего дерева.
Есть ли програмулька, которая позволяет это сделать?
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Sizeof utility

Сообщение t.t »

Первое, что приходит в голову -- написать скриптик ( perl | (bash & (sed | awk) ), который ищет определение структуры по её имени, подставляет это определение в сишный исходник-пустышку с чем-то типа printf("%u", sizeof(x)); и компилит.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
oav
Бывший модератор
Сообщения: 296

Re: Sizeof utility

Сообщение oav »

(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

Сообщение t.t »

(oav @ Friday, 13 August 2004, 11:42) писал(а):Это смотря какая задача стоит (автор не точно описал), если интересует статический размер структуры - т.е. размер для размещения ее в памяти - этот размер известен на этапе компиляции (sizeof - оператор времени компиляции), или реальный размер - как видим, там есть указатель, который указывает на yyyy которая тоже имеет свой размер. В последней случае sizeof не прокатит есессна
А рекурсия на что? В скрипте просто прописать самовызов для таких вот случаев.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Re: Sizeof utility

Сообщение flook »

(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

Сообщение oav »

(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

Сообщение flook »

(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 не прокатит есессна
А рекурсия на что? В скрипте просто прописать самовызов для таких вот случаев.


А если переменная полиморфная?

Какая разница. Если под мой объект выделена память, то хоть она трижды полиморфная - но _фиксированный_ размер она в памяти занимает.

(flook @ Friday, 13 August 2004, 13:41) писал(а):Вообще-то я явно сказал - ДО КОМПИЛЯЦИИ. И потом - sizeof(struct foo*) определен даже если и не знать что из себя представляет struct foo.

oknp sizeof катит. размер указателя чаще всего 4 байта :)


Чаще всего - это почти всегда, а почти всегда - это всегда за исключением множества меры 0?
Лично я еще не видел, чтоб на 386 компах xxx* разворачивался во что либо кроме .long...
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали:
Аватара пользователя
oav
Бывший модератор
Сообщения: 296

Re: Sizeof utility

Сообщение oav »

[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]
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Re: Sizeof utility

Сообщение flook »

Ладно. Закончили состязание "кто выше писает на стенку".
Значит никто не знает... :(
Жаль :bestbook:
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали:
Аватара пользователя
oav
Бывший модератор
Сообщения: 296

Re: Sizeof utility

Сообщение oav »

(flook @ Tuesday, 17 August 2004, 15:06) писал(а):Ладно. Закончили состязание "кто выше писает на стенку".
Значит никто не знает...  :(
Жаль  :bestbook:

ну да. задача нестандартная уж больно. а зачем вам это, если не секрет? :)
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Re: Sizeof utility

Сообщение flook »

(oav @ Tuesday, 17 August 2004, 14:33) писал(а):
(flook @ Tuesday, 17 August 2004, 15:06) писал(а):Ладно. Закончили состязание "кто выше писает на стенку".
Значит никто не знает...  :(
Жаль  :bestbook:

ну да. задача нестандартная уж больно. а зачем вам это, если не секрет? :)



Не секрет. Я kernel-developer-ом работаю B) , а текущая задача требует знаний размеров многих структур, в том числе и "нестандартных". А пересобирать ядро из-за каждой структуры или бегать по коду собирая все то, что они там в себе содержат - не клёво...
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали:
Аватара пользователя
oav
Бывший модератор
Сообщения: 296

Re: Sizeof utility

Сообщение oav »

(flook @ Wednesday, 18 August 2004, 13:28) писал(а):
(oav @ Tuesday, 17 August 2004, 14:33) писал(а):
(flook @ Tuesday, 17 August 2004, 15:06) писал(а):Ладно. Закончили состязание "кто выше писает на стенку".
Значит никто не знает...  :(
Жаль  :bestbook:

ну да. задача нестандартная уж больно. а зачем вам это, если не секрет? :)



Не секрет. Я kernel-developer-ом работаю B) , а текущая задача требует знаний размеров многих структур, в том числе и "нестандартных". А пересобирать ядро из-за каждой структуры или бегать по коду собирая все то, что они там в себе содержат - не клёво...


that cool :thumbsup: . ну почему именно сама sizeof не подходит?
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Re: Sizeof utility

Сообщение flook »

(oav @ Wednesday, 18 August 2004, 12:59) писал(а):that cool  :thumbsup: . ну почему именно сама sizeof не подходит?


Подходит, но для того чтоб ее попользовать нужно собрать ядро или выдернуть нужную структуру из сырцов, вставить ее в свою мини-прожку и там сделать sizeof, а если в это структуре есть свои структуры, то это надо еще их искать, что утомляет. Потом размер структуры зависит от config опций... Все это хоцца автоматизировать. Эх... :unsure:
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали:
Аватара пользователя
oav
Бывший модератор
Сообщения: 296

Re: Sizeof utility

Сообщение oav »

(flook @ Wednesday, 18 August 2004, 14:40) писал(а):
(oav @ Wednesday, 18 August 2004, 12:59) писал(а):that cool  :thumbsup: . ну почему именно сама sizeof не подходит?


Подходит, но для того чтоб ее попользовать нужно собрать ядро или выдернуть нужную структуру из сырцов, вставить ее в свою мини-прожку и там сделать sizeof, а если в это структуре есть свои структуры, то это надо еще их искать, что утомляет. Потом размер структуры зависит от config опций... Все это хоцца автоматизировать. Эх... :unsure:


ой нехорошой дорогой идете товришь имхо :) как-то все это пахнет большими проблемами на интеграции и поддержке в будущем...
удачи :)
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Re: Sizeof utility

Сообщение flook »

ой нехорошой дорогой идете товришь имхо :) как-то все это пахнет большими проблемами на интеграции и поддержке в будущем... :)


:huh: Я ж не эту утилиту прогаю...

удачи :)


Спасибо :thumbsup:
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали: