Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何让MSVC将未初始化的数据放入.bss?_C++_C_Visual C++ - Fatal编程技术网

C++ 如何让MSVC将未初始化的数据放入.bss?

C++ 如何让MSVC将未初始化的数据放入.bss?,c++,c,visual-c++,C++,C,Visual C++,我正在使用自定义生成系统(在Visual Studio之外)生成DLL,无法获取未初始化的数据以显示在.bss部分;编译器将其集中到.data中。这会增大最终二进制大小,因为它充满了巨大的零数组 例如(示例中为小1KB阵列,但实际缓冲区要大得多): 编译器发出如下程序集: PUBLIC _initialized _DATA SEGMENT COMM _uninitialized:DWORD:0400H _initialized DD 07bH ORG $+4092 _DATA

我正在使用自定义生成系统(在Visual Studio之外)生成DLL,无法获取未初始化的数据以显示在
.bss
部分;编译器将其集中到
.data
中。这会增大最终二进制大小,因为它充满了巨大的零数组

例如(示例中为小1KB阵列,但实际缓冲区要大得多):

编译器发出如下程序集:

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
它在对象文件中的结尾如下:

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
我已经浏览了所有的选项列表,但是我没有发现任何明显的东西


我正在使用Visual Studio 2008 SP1(Microsoft(R)32位C/C++优化编译器版本15.00.30729.01 for 80x86)的编译器。

您想使用
\u declspec(allocate())
,您可以在这里阅读:

如果您不关心可移植性,您可以尝试使用。

注意“原始数据的大小”仅为0x1000或4kB-仅与初始化数组的大小完全相同。.data部分的虚拟化将大于二进制映像中存储的实际数据的大小,未初始化的数组将占用空闲空间。使用bss_seg pragma将强制链接器将未初始化的数据放入其单独的部分