malloc(size_t size)的物理内存分配有关问题

malloc(size_t size)的物理内存分配问题
本帖最后由 u012425973 于 2013-11-08 19:09:11 编辑

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

main()
{
char *p1 = malloc(0);
short *p2 = malloc(4);
int *p3 = malloc(8);

printf("p1=%p\n", p1);
printf("++p1=%p\n", ++p1);
printf("++p1=%p\n", ++p1);
printf("++p1=%p\n", ++p1);
printf("++p1=%p\n", ++p1);
printf("++p1=%p\n", ++p1);
printf("p2=%p\n", p2);
printf("++p2=%p\n", ++p2);
printf("++p2=%p\n", ++p2);
printf("p3=%p\n", p3);
printf("++p3=%p\n", ++p3);
printf("++p3=%p\n", ++p3);

printf("pid = %d\n", getpid());
while(1);
}


malloc(size_t size)的物理内存分配有关问题

下面在linux下做了测试。有一些疑问求解惑

malloc分配的指针类型影响偏移,p1,p2,p3虚拟地址因为链式存储结构4个成员的原因,所以3个首地址彼此相差了16个字节空间。就linux分配的虚拟内存来说 也看不出size的实际意义
很想知道实际映射的物理内存是什么样的? 怎么看物理内存的具体情况呢?
我想知道参数size的分配不同的值 做相应的操作 物理内存会有何变化?


------解决方案--------------------
引用:
我就想研究操作系统底层,写了这个测试,段页式的内存管理方式,应该是会分配4k的整数倍物理空间,
您看我的那个运行结果,p1,p2,p3虚拟地址都是相差了16个字节空间,实际的结构就是4个成员指针,存储都是物理内存的地址,我是想看看malloc中的size参数影响的物理内存实际的变化。
比如说我写malloc(1000) malloc(5) 这些变化


malloc()申请分配堆内存的时候,是根据系统空闲内存空间碎片中选择一块跟你申请的内存大小差不多的内存块给你,在保护模式下你想看真的物理地址就需要 段、叶、逻辑地址、实地址之间的关系转换,所以即使逻辑地址上只相差16字节,但是实地址上相差多少就的自己算了
《个人理解,纯属虚构》