在C中使用malloc进行内存分配

mgu*_*gus 5 c memory malloc pointers

这是我的计划:

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

main(){
   char *p1, *p2, *p3, *p4;

   p1 = (char*)malloc(10);
   p2 = (char*)malloc(10);
   p3 = (char*)malloc(16);
   p4 = (char*)malloc(32);

   printf("p1 points at: %d\n", p1);
   printf("p2 points at: %d\n", p2);
   printf("p3 points at: %d\n", p3);
   printf("p4 points at: %d\n\n", p4);

   system("PAUSE");
}
Run Code Online (Sandbox Code Playgroud)

这会在我的电脑上产生以下输出:

p1点数:6492080

p2点数:6492104

p3点数:6492128

p4点数:6492152

因此,无论分配了多少字节,malloc分配的每个内存空间都会进一步开始24个字节.这是为什么?我感谢您的帮助!

Dav*_*son 5

确切的行为malloc由您的特定实现(编译器/ libc/OS)决定.通过打印地址,您的程序将处理未定义的行为.

如果通过告诉我们您正在使用什么编译器,使用什么操作系统,使用什么体系结构以及使用什么版本的libc来缩小问题的范围,那么我们可能能够提供有关该实现的更具体的答案.为什么这个数字是24.

我的GUESS就是在你的实现中,malloc内存的每个ed区域需要从一个8的倍数开始,并且还有8个字节的开销.

编辑:如果你malloc再次调用p4后创建p5,模式肯定无法继续,所以你的语句"malloc分配的每个内存空间进一步开始24字节,无论分配多少字节." 是假的.