Zdravím, chcel by som sa spýtať ako by ste riešili nasledujúci problém. V 64bit systéme mám štruktúru
typedef struct
{
bool nieco1;
bool nieco2;
int niecoint1;
int niecoint2;
// <- tu je medzera
void *pointer;
}
na vyznačenom mieste však vždy ostane v pamäti miesto (4 bajty), pretože asi adresu pre smerník posúva tak aby sa mu to lepšie rátalo. Neviete mi poradiť ako to vypnúť, alebo ako to vyriešiť? Potreboval by som aby ten smerník začínal hneď za niecoint2 a nedávalo tam medzeru. Používam Visual 2010 premium.
#3Grungy
Já bych spíše doporučil použít #pragma pack jen pro vybranou strukturu. A pro ostatní to ponechat na defaultní nastavení.
Je třeba dát pozor na to že u zapakovaných struktur může dojít k problémům, například u vícevláknových aplikací.Nebo třeba při přenosu na jinou platformu která "pack" neumí nebo u něj má nějaké omezení.
Osobně používám jen pokud je opravdu potřeba "binární" kompatbilita. Například pro ukládání do souboru který má specifikován binární formát,nebo posílání dat do nějakého zařízení přez tcpip,seriovou linku, atp.
Pokud se jedná o optimalizaci z důvodu paměťové náročnosti, někdy pomůže vhodné poskládání stejných(stejně velikých) typů proměnných k sobě. zejména nevkládat proměnnou char mezi dva int a tak podobně.Ale samozřejmně závisí na situaci.