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

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

清欢 发布于 2021-11-26 字数 2248 浏览 750 回复 4

#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("%pn",&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("%pn",&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("%pn",&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("%pn",&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开始的呢?为什么中间有那么多内存碎片?

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

凌乱心跳 2021-12-01 4 楼

是啊......能不能说得详细一点为什么会有那么多碎片?

狼亦尘 2021-12-01 3 楼

回复
呵呵,作为参考吧。 http://www.kerneltravel.net/journal/v/mem.htm http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201311884819764/

别低头,皇冠会掉 2021-12-01 2 楼

不是动态分配么

无人问我粥可暖 2021-11-30 1 楼

是因为块大小为32位吗?