free()函数的疑问. C高手请进
比如:
int *pi1; pi1=(int *)malloc(10*sizof(int));
int *pi2; pi2=pi1+1; free(pi1); free(pi2);
free() 函数释放内存时怎么知道要释放多少内存数?它怎么知道pi1, pi2 的所指向
的内存数目?
[解决办法]
free(pi2);能行么?
多少内存编译器自己会存起来你分配多少的
[解决办法]
free(pi1); free(pi2);
这样是要出问题滴 ·········
至于你说的 free 如何知道需要释放多少内存,
这个就是计算机操作系统之 内存管理 部分的事情了 ······
[解决办法]
建议楼主使用new和delete来动态申请和释放空间,内部的工作都由编译器做好了,你要做的就是会使用而已.并且确保你的申请比你自己写的效率要高.
effective当中已经说了,在使用过程当中最好使用new delete来代替malloc和free.这样更加异常安全些.
[解决办法]
malloc/free是库函数,里面有定义分配的内存数量。
union mhead {
bits64_t mh_align;/* 8 */
struct {
char mi_alloc; /* ISALLOC or ISFREE *//* 1 */
char mi_index;/* index in nextf[] *//* 1 */
/* Remainder are valid only when block is allocated */
u_bits16_t mi_magic2;/* should be == MAGIC2 *//* 2 */
u_bits32_t mi_nbytes;/* # of bytes allocated *//* 4 */
} minfo;
};
malloc/free调用系统函数brk,该函数在进程控制块记录信息。其分配释放以页为单位。