标题:为什么malloc使用的空间远远大于实际申请的空间?
取消只看楼主
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
结帖率:79.17%
已结贴  问题点数:10 回复次数:3 
为什么malloc使用的空间远远大于实际申请的空间?
程序代码:
// 目的:malloc 函数实现方式探索
// 平台:VC6.0 20100815

#include   <stdio.h> 

#include   <stdlib.h>
#include   <malloc.h>
#include   <assert.h>

char *Alloc_CHAR_Array(long length)
{
    char *array = NULL;
   

    if( NULL == (array = (char *)malloc(sizeof(char) * length) ) )
    {
        fprintf(stdout, "Merory Exhausted\n");
        return NULL;
    }
    //memset(array, 0, length*sizeof(double));
    return array;
}

void Free_Array (char **array)
{   

    assert( array != NULL);
    printf("array=0x%p,*array=0x%p\n",array,*array);
    free(*array);
}

int main() 

{ 

    char *p1 = Alloc_CHAR_Array(0x100);
    char *p2 = Alloc_CHAR_Array(0x100);
    printf("p1=0x%p,p2=0x%p\n",p1,p2);
    p1[0] = '1';
    p2[0] = '2';

    // 验证 Free_Array 正确的释放了空间
    Free_Array(&p1);
    p1 = Alloc_CHAR_Array(0x100);
    p1[0] = '1'; 

    p2[0] = '2';
    printf("p1=0x%p,p2=0x%p\n",p1,p2);
   

    //

    Free_Array(&p2);
    p2 = Alloc_CHAR_Array(0x90);

    printf("p1=0x%p,p2+0x90=0x%p\n",p1,p2+0x90); 

    char *p3 = Alloc_CHAR_Array(0x10);
    printf("p1=0x%p,p2=0x%p,p3=0x%p\n",p1,p2,p3);

    printf("p1=0x%p,p3+0x10=0x%p\n",p1,p3+0x10);
    p3 = Alloc_CHAR_Array(0x10);
    printf("p1=0x%p,p2=0x%p,p3=0x%p\n",p1,p2,p3);
   

    return 0;
} 

发现实际申请的 0x10 字节空间,在malloc申请时总被占用0x38 个字节的存储空间!
搜索更多相关主题的帖子: malloc 空间 申请 
2010-08-08 10:38
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
得分:0 
是的,但总是0x38 你不觉得很奇怪?
这中间空着的干什么用呢 ?

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-08-08 11:49
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
得分:0 
回复 4楼 yxwsbobo
是的,对于使用者是不用关心这个问题的
但是我想在嵌入式系统上实现自己的malloc函数,借鉴下操作系统的做法的话,还是要深究下这个函数到底怎么实现的

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-08-08 15:12
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
得分:0 
恩,看来要重算法上仔细研究才是王道!

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-08-08 20:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-315112-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.196162 second(s), 9 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved