Windows里malloc时,操作系统分配内存时会在分配的内存前面多分配20个字节,其中前16个字节用于内存管理时使用,后4个字节用于标识内存边界。分配空间后面也会有4个字节用于标识边界。
如malloc分配一个n字节的空间,实际的内存为
返回的指针指向如下内存段的首地址
↓
|16个字节的内存管理信息|4字节边界|n字节的空间|4字节边界|
↑
这里的第5个字节到第8字节是一个4字节整形,记录着内存空间的大小
这是上边的解释,你图上的 屯 字的位置就是 上边n字节空间的位置,
你所能使用的内存只到 屯 结束的位置,
至于后边多出来的应该是每次分配内存中后续边界问题造成的,虽然也占用了一定内存,
但是你是不能使用的,你所能使用的就是前50个而已。
至于为什么32位系统是多出来14个字节,64位系统多出来30个字节,应该是边界不同问题造成的。
具体我也不很清楚,只能帮你到这里了, o(╯□╰)o
C/C++中的内存分配本来就不是要多少就给多少,而是尽量和二进制的边界对齐,以便可以重复使用分配的内存,或合并两块临近的内存块,为更多的内存需求服务。分块的大小和堆的算法有关系,不用深究吧。
c的基本数据类型在不同版本下长度不同,这是在32位于64位下内存分配产生区别的根本原因。
望采纳。