malloc(size_t size)的物理内存分配有关问题
malloc(size_t size)的物理内存分配问题
下面在linux下做了测试。有一些疑问求解惑
malloc分配的指针类型影响偏移,p1,p2,p3虚拟地址因为链式存储结构4个成员的原因,所以3个首地址彼此相差了16个字节空间。就linux分配的虚拟内存来说 也看不出size的实际意义
很想知道实际映射的物理内存是什么样的? 怎么看物理内存的具体情况呢?
我想知道参数size的分配不同的值 做相应的操作 物理内存会有何变化?
------解决方案--------------------
malloc()申请分配堆内存的时候,是根据系统空闲内存空间碎片中选择一块跟你申请的内存大小差不多的内存块给你,在保护模式下你想看真的物理地址就需要 段、叶、逻辑地址、实地址之间的关系转换,所以即使逻辑地址上只相差16字节,但是实地址上相差多少就的自己算了
《个人理解,纯属虚构》
#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);
}
下面在linux下做了测试。有一些疑问求解惑
malloc分配的指针类型影响偏移,p1,p2,p3虚拟地址因为链式存储结构4个成员的原因,所以3个首地址彼此相差了16个字节空间。就linux分配的虚拟内存来说 也看不出size的实际意义
很想知道实际映射的物理内存是什么样的? 怎么看物理内存的具体情况呢?
我想知道参数size的分配不同的值 做相应的操作 物理内存会有何变化?
------解决方案--------------------
malloc()申请分配堆内存的时候,是根据系统空闲内存空间碎片中选择一块跟你申请的内存大小差不多的内存块给你,在保护模式下你想看真的物理地址就需要 段、叶、逻辑地址、实地址之间的关系转换,所以即使逻辑地址上只相差16字节,但是实地址上相差多少就的自己算了
《个人理解,纯属虚构》