raj*_*raj 6 c c++ malloc memory-management
我刚刚在一台12 MB的机器上执行了一个mallocs 13 MB的程序(QEMU Emulated!).不仅如此,我甚至浏览了记忆并填充了垃圾......
void
large_mem(void)
{
#define LONGMEM 13631488
long long *ptr = (long long *)malloc(LONGMEM);
long long i;
if(!ptr) {
printf("%s(): array allocation of size %lld failed.\n",__func__,LONGMEM);
ASSERT(0);
}
for(i = 0 ; i < LONGMEM ; i++ ) {
*(ptr+i)=i;
}
free(ptr);
}
Run Code Online (Sandbox Code Playgroud)
这怎么可能 ?我期待一个分段错误.
Naw*_*waz 10
它被称为为您的程序分配的虚拟内存.它不是你称之为RAM的真实内存.
虚拟内存也有最大限制,但它高于RAM.它由您的操作系统实现(和定义).
这称为惰性分配.
大多数类似Linux的操作系统都有一个Lazy Allocation内存模型,其中返回的内存地址是一个虚拟地址,实际的分配只在访问时发生.操作系统假定它能够在访问时提供此分配.
在程序实际触摸之前,malloc分配的内存不受实际内存的支持.
同时,由于calloc将内存初始化为0,因此可以确保操作系统已经使用实际RAM(或交换)支持分配.
尝试使用,calloc并且很可能它会让你内存不足,除非你的交换文件/分区足够大以满足请求.
| 归档时间: |
|
| 查看次数: |
3718 次 |
| 最近记录: |