我问的原因是:
#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。这有什么意义?它的一部分会在堆上分配吗?如果我用数据初始化它们那么大小是否正确?
答案 0 :(得分:12)
在这种情况下,缓冲区将在运行时在程序的stack space上分配。它们不需要静态内置到exe
文件中。
答案 1 :(得分:5)
请记住,您正在声明变量(而不是它们的块),而不是定义必须存储在应用程序中的数据。您存储在硬盘驱动器上的只是一系列指令,而不是缓冲区本身。
答案 2 :(得分:1)
这些数组在堆栈上分配,就像所有自动变量一样。在二进制文件中使用一长串零来表示它们的大小是毫无意义的。如果要在代码中定义数组的全部内容,那么是的,二进制大小将接近数组大小和编译代码大小的总和。
答案 3 :(得分:0)
在工作内存>中的运行时期间分配,初始化和使用数组。它们不保存在.exe或任何文件中(保存虚拟内存或交换文件)。
答案 4 :(得分:0)
只需要将非零初始化数据构建到可执行二进制文件中;这些是单元化阵列。