我正在構建使用自定義構建系統(Visual Studio之外)的DLL,並且我無法獲取未初始化的數據以顯示在.bss
部分;編譯器把它存入.data
。這擴大了最終的二進制大小,因爲它充滿了巨大的零數組。如何讓MSVC將未初始化的數據放入.bss中?
例如(在示例小1KB陣列,但實際的緩衝器大得多):
int uninitialized[1024];
int initialized[1024] = { 123 };
編譯器發射組件是這樣的:
PUBLIC _initialized
_DATA SEGMENT
COMM _uninitialized:DWORD:0400H
_initialized DD 07bH
ORG $+4092
_DATA ENDS
其中在對象結束文件是這樣的:
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
(沒有.bss
部分。)
目前的編譯標誌:
cl -nologo -c -FAsc -Faobjs\ -W4 -WX -X -J -EHs-c- -GR- -Gy -GS- -O1 -Os -Foobjs\file.o file.cpp
我已經通過選項列表看着http://msdn.microsoft.com/en-us/library/fwkeyyhe(v=vs.71).aspx但我還沒有發現任何明顯。
我正在使用來自Visual Studio 2008 SP1(Microsoft(R)32位C/C++優化編譯器版本15.00.30729.01(適用於80x86)的編譯器)。