接下来我们将探究以下三个问题:
1.相邻两次malloc得到的空间是否是连续的呢?
2.你得到的空间的实际大小是否就是你要求的大小呢?
3.如果你malloc零长度会得到什么结果呢?
第一个问题:
显然不是连续的
第二个问题
不一定。。我们给malloc的参数是以字节为单位的,但是系统分配内存的时候貌似并不是以1个字节作为最小分配单位的(这可能和系统对内存的划分和管理有关,完全不懂。。。)。比如,系统每次最少分配32字节的内存,这时我 malloc(8) 一下,我问系统要8个字节的内存,再加上MCB(你可以假定通常MCB占用8个字节),总需求就是16个字节,这时系统并不是给16字节,而是买一送一,直接把32字节全给了你。。但是当我 malloc(25)的时候,总需求是33字节,当然,系统不会只给32字节,这样就不满足你的需要了,这时它会分配给你一个更大的空间(同样由于系统内部的原因,它不会给你33字节,而会给你一个它认为合适的内存大小,比如说48字节,这样你实际得到的可用内存就是40字节)。。
第三个问题
同样, malloc(0)只是说我对不需要任何可用内存,但是malloc还是会开辟一块地方存放一个MCB,由于和上面相同的原理,也是会占用一定的内存空间的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)