私はカスタムビルドシステム(Visual Studio外)を使用してDLLを構築しており、初期化されていないデータを.bss
セクションに表示することはできません。コンパイラはそれを.data
にまとめます。これは巨大な0の配列でいっぱいであるため、最終的なバイナリサイズを拡張します。例えばMSVCで.bssに初期化されていないデータを格納するにはどうすればよいですか?
(この例では、小さな1キロバイトアレイ、実際のバッファがはるかに大きい):
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用))を使用しています。