我正在使用自定义构建系统(在Visual Studio外部)构建DLL,并且我无法获得未初始化的数据以显示在该.bss部分中; 编译器把它归结为.data.这膨胀了最终的二进制大小,因为它充满了巨大的零数组.
例如(示例中的小1KB数组,但实际缓冲区要大得多):
int uninitialized[1024];
int initialized[1024] = { 123 };
Run Code Online (Sandbox Code Playgroud)
编译器发出如下所示的程序集:
PUBLIC _initialized
_DATA SEGMENT
COMM _uninitialized:DWORD:0400H
_initialized DD 07bH
ORG $+4092
_DATA ENDS
Run Code Online (Sandbox Code Playgroud)
最终在目标文件中如下所示:
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
Run Code Online (Sandbox Code Playgroud)
(没有.bss部分.)
当前的编译标志:
cl -nologo -c -FAsc -Faobjs\ -W4 -WX -X -J -EHs-c- -GR- -Gy -GS- -O1 -Os -Foobjs\file.o file.cpp
Run Code Online (Sandbox Code Playgroud)
我查看了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 for 80x86).
您想要使用__declspec(allocate()),您可以在此处阅读:https://learn.microsoft.com/en-us/cpp/cpp/allocate? view=msvc-170
为了更深入地了解__declspec(allocate()),Raymond Chen 在此处发表了一篇博客文章: https: //devblogs.microsoft.com/oldnewthing/20181107-00/ ?p=100155
| 归档时间: |
|
| 查看次数: |
954 次 |
| 最近记录: |