红联Linux门户
Linux帮助

malloc分配疑问

发布时间:2014-02-10 15:11:07来源:红联作者:zhangyuxiu
最近学习用户空间的内存分配知识,了解到用户通过malloc()函数,最终调用brk()或者mmap()分配内存。
两种分配方式都是只分配虚拟内存,不分配物理内存;第一次访问已分配的虚拟地址空间时,缺页中断,OS分配物理内存,建立物理内存和虚拟内存映射关系。


疑问:
1、linux C编程中,使用malloc函数返回的是虚拟空间地址还是物理空间地址?
2、malloc 40个字节,访问第100个字节为什么不会报错?

如下代码:
int * p = (int *) malloc(sizeof(int)*40);
cout << *(p+100);
文章评论

共有 5 条评论

  1. guofeidage 于 2014-03-17 20:57:37发表:

    5她4图5太5她谈4图4

  2. remosa 于 2014-03-14 15:20:38发表:

    同问,在用户程序中调用malloc函数,但是在内核中是调用kmalloc函数还是vmallo函数

  3. 小子要买房 于 2014-03-02 21:58:13发表:

    malloc分配的是虚拟地址。
    另外malloc分配了一个40字节的空间大小,把首地址传给p,但是并不等于说只能访问这40个地址中的内容,也可以访问这40字节以外的,至于报不报错,那是一个不确定的情况,有时你访问第10000个字节也不会报错,但有时你访问第41个也会报错,所以访问这种不确定的地址,结果也是不确定的。全是个人见解,如果瑕疵,请大神指点???

  4. yu-ge 于 2014-02-17 14:14:09发表:

    坐等大神解答

  5. 于 2014-02-10 19:44:24发表:

    malloc具体分配的物理内存在哪个zone区?zone_dma, zone_normal 还是 zone_highmem?