exe可以小于其最大声明的缓冲区吗?

时间:2011-01-17 22:02:37

标签: c++ c windows visual-studio buffer

我问的原因是:

#include <string.h>

using namespace std;

int main()
{
    unsigned char file[512000];
    unsigned char key[512000];
    for(int i = 0; i < 512000; i++)
            file[i] = key[i];
    return 0;
}

当我在Windows上使用cl.exe编译它时,我得到一个大小约为31kb的可执行文件。缓冲区本身各500kb。这有什么意义?它的一部分会在堆上分配吗?如果我用数据初始化它们那么大小是否正确?

5 个答案:

答案 0 :(得分:12)

在这种情况下,缓冲区将在运行时在程序的stack space上分配。它们不需要静态内置到exe文件中。

答案 1 :(得分:5)

请记住,您正在声明变量(而不是它们的块),而不是定义必须存储在应用程序中的数据。您存储在硬盘驱动器上的只是一系列指令,而不是缓冲区本身。

答案 2 :(得分:1)

这些数组在堆栈上分配,就像所有自动变量一样。在二进制文件中使用一长串零来表示它们的大小是毫无意义的。如果要在代码中定义数组的全部内容,那么是的,二进制大小将接近数组大小和编译代码大小的总和。

答案 3 :(得分:0)

在工作内存中的运行时期间分配,初始化和使用数组。它们不保存在.exe或任何文件中(保存虚拟内存或交换文件)。

答案 4 :(得分:0)

只需要将非零初始化数据构建到可执行二进制文件中;这些是单元化阵列。