linux环境编程系统内存分配问题

断桥残雪断桥残雪 发布于 2015/06/18 19:58
阅读 219
收藏 0
#include "csapp.h"

void main()
{
  int *array,i,n;
  double *array1,*array2;
  printf("请输入数组大小\n");
  scanf("%d",&n);
  array=malloc(n*sizeof(int));
  for(i=0;i<n;i++)
    scanf("%d",&array[i]);
  printf("第一次分配的内存地址:\n");
  for(i=0;i<n;i++)
    printf("%p\n",&array[i]);

  printf("请输入double1数组大小\n");
  scanf("%d",&n);
  array1=malloc(n*sizeof(double));
  for(i=0;i<n;i++)
    scanf("%lf",&array1[i]);
  printf("分配double1的内存地址:\n");
  for(i=0;i<n;i++)
    printf("%p\n",&array1[i]);

  printf("请输入double2数组大小\n");
  scanf("%d",&n);
  array2=malloc(n*sizeof(double));
  for(i=0;i<n;i++)
    scanf("%lf",&array2[i]);
  printf("分配double2的内存地址:\n");
  for(i=0;i<n;i++)
    printf("%p\n",&array2[i]);
 
  free(array1);
 
  printf("请再次输入数组大小\n");
  scanf("%d",&n);
  array=malloc(n*sizeof(int));
  for(i=0;i<n;i++)
    scanf("%d",&array[i]);
  printf("第二次分配的内存地址:\n");
  for(i=0;i<n;i++)
    printf("%p\n",&array[i]);
  exit(0);

}


代码如上所示,运行结果如下所示:

zzw@zzw-ThinkPad-Edge-E430c:~/doc_main/CProgram/Exercise/Demo21$ ./main5.o
请输入数组大小
2
13 21
第一次分配的内存地址:
0x1217010
0x1217014
请输入double1数组大小
3
13
21
41
分配double1的内存地址:
0x1217030
0x1217038
0x1217040
请输入double2数组大小
2
34
42
分配double2的内存地址:
0x1217050
0x1217058
请再次输入数组大小
3
13
42
13
第二次分配的内存地址:
0x1217030
0x1217034
0x1217038

请问一下,为什么第一次分配整型内存后,第二次分配double内存时,是从0x1217030开始的呢?为什么中间有那么多内存碎片?

加载中
0
断桥残雪断桥残雪
断桥残雪断桥残雪
是因为块大小为32位吗?
0
如比如比
如比如比
不是动态分配么
如比如比
如比如比
回复 @张泽旺 : 呵呵,作为参考吧。 http://www.kerneltravel.net/journal/v/mem.htm http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201311884819764/
断桥残雪断桥残雪
断桥残雪断桥残雪
是啊......能不能说得详细一点为什么会有那么多碎片?
返回顶部
顶部