我正在尝试使用malloc进行实验,以查看是否可以分配所有可用的内存。
我使用了以下简单的程序,并有一些问题:
int main(void)
{
char * ptr;
int x = 100;
while(1)
{
ptr = (char *) malloc(x++ * sizeof(char) / 2);
printf("%p\n",ptr);
}
return 0;
}
1) 为什么使用更大的数据类型(int、unsigned long long int、long double)时,进程会使用更少的内存,而使用更小的数据类型(int、char)时,它会使用更多的内存?
2) 运行程序时,当达到一定数量的内存(在 Windows 7 64 位上约为 592mb,具有 8GB RAM 交换文件设置为系统管理)。如果打印输出显示为 0,这意味着 NULL。为什么在达到此阈值后停止分配内存,而不是耗尽系统内存和交换空间?
我发现以下帖子中有人尝试与我做同样的事情,但他们没有看到内存使用方面的任何差异,而我看到了。 Memory Leak Using malloc fails
我已在 Linux 内核 2.6.32-5-686 上尝试了代码,并获得了类似的结果。
感谢您的帮助和解释。
谢谢,
malloc
的返回值强制转换。这样做充其量是多余的...而且,就像在您的情况下一样,可能会隐藏编译器可以在没有强制转换的情况下捕获的错误。 - pmg