2011-10-10 12 views
7

Buduję bibliotekę DLL przy użyciu niestandardowego systemu kompilacji (poza programem Visual Studio) i nie mogę uzyskać niezainicjowanych danych do wyświetlenia w sekcji .bss; kompilator umieszcza go w .data. To sprowadza ostateczny rozmiar binarny, ponieważ jest pełen gigantycznych tablic zer.Jak ustawić MSVC do umieszczenia niezainicjowanych danych w pliku .bss?

na przykład (małe tablice 1 KB w tym przykładzie, ale rzeczywista bufory są znacznie większe):

int uninitialized[1024]; 
int initialized[1024] = { 123 }; 

Kompilator wydziela zespół tak:

PUBLIC _initialized 
_DATA SEGMENT 
COMM _uninitialized:DWORD:0400H 
_initialized DD 07bH 
    ORG $+4092 
_DATA ENDS 

, który kończy się w obiekcie złożyć tak:

SECTION HEADER #3 
    .data name 
     0 physical address 
     0 virtual address 
    1000 size of raw data 
    147 file pointer to raw data (00000147 to 00001146) 
     0 file pointer to relocation table 
     0 file pointer to line numbers 
     0 number of relocations 
     0 number of line numbers 
C0400040 flags 
     Initialized Data 
     8 byte align 
     Read Write 

(nie ma sekcja .bss.)

Obecne flagi kompilacji:

cl -nologo -c -FAsc -Faobjs\ -W4 -WX -X -J -EHs-c- -GR- -Gy -GS- -O1 -Os -Foobjs\file.o file.cpp 

ja przejrzałem listy opcji na http://msdn.microsoft.com/en-us/library/fwkeyyhe(v=vs.71).aspx ale nie mam nic oczywistego dostrzeżone.

Używam kompilatora z Visual Studio 2008 SP1 (Microsoft (R) 32-bitowy C/C++ Optymalizujący kompilator wersja 15.00.30729.01 dla 80x86).

Odpowiedz

1

Yo może spróbować użyć bss_seg pragma jeśli nie jesteś zaniepokojony przenośności.

2

Należy zauważyć, że "rozmiar nieprzetworzonych danych" to tylko 0x1000 lub 4kB - dokładnie tyle, ile wynosi tylko zainicjowana tablica. Rozmiar wirtualny twojej sekcji .data będzie większy niż rozmiar rzeczywistych danych przechowywanych w obrazie binarnym, a niezainicjowana tablica zajmować będzie wolne miejsce. Korzystanie z pragma bss_seg zmusi linker do umieszczenia niezainicjowanych danych w oddzielnej sekcji.

Powiązane problemy