最近学习用户空间的内存分配知识,了解到用户通过malloc()函数,最终调用brk()或者mmap()分配内存。
两种分配方式都是只分配虚拟内存,不分配物理内存;第一次访问已分配的虚拟地址空间时,缺页中断,OS分配物理内存,建立物理内存和虚拟内存映射关系。
疑问:
1、linux C编程中,使用malloc函数返回的是虚拟空间地址还是物理空间地址?
2、malloc 40个字节,访问第100个字节为什么不会报错?
如下代码:
int * p = (int *) malloc(sizeof(int)*40);
cout << *(p+100);
guofeidage 于 2014-03-17 20:57:37发表:
5她4图5太5她谈4图4
remosa 于 2014-03-14 15:20:38发表:
同问,在用户程序中调用malloc函数,但是在内核中是调用kmalloc函数还是vmallo函数
小子要买房 于 2014-03-02 21:58:13发表:
malloc分配的是虚拟地址。
另外malloc分配了一个40字节的空间大小,把首地址传给p,但是并不等于说只能访问这40个地址中的内容,也可以访问这40字节以外的,至于报不报错,那是一个不确定的情况,有时你访问第10000个字节也不会报错,但有时你访问第41个也会报错,所以访问这种不确定的地址,结果也是不确定的。全是个人见解,如果瑕疵,请大神指点???
yu-ge 于 2014-02-17 14:14:09发表:
坐等大神解答
于 2014-02-10 19:44:24发表:
malloc具体分配的物理内存在哪个zone区?zone_dma, zone_normal 还是 zone_highmem?