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).