首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

数组和指针最小化内存的有关问题

2012-02-14 
数组和指针最小化内存的问题原程序中有这样一段代码:typedefstruct{unsignedcharLength[17]Huffmancodeso

数组和指针最小化内存的问题
原程序中有这样一段代码:
typedef   struct{
      unsigned   char   Length[17];Huffman   codes   of   length   k
      unsigned   short   int   minor_code[17];  
      unsigned   short   int   major_code[17];    
      unsigned   char   V[65536];   //此处由于占用静态空间太大,我想改成指针.
}Huffman_table

Huffman_table   *htable;
static   Huffman_table   HTAC[4];
static   Huffman_table   HTDC[4];

void   load_header()
{
      for   (j=0;j <wp-2;)
        {
            old_byte_pos=byte_pos;
            BYTE_p(byte_pos);   HT_info=bp;
            if   ((HT_info&0x10)!=0)   htable=&HTAC[HT_info&0xF];
              else   htable=&HTDC[HT_info&0xF];
            load_Huffman_table(htable)
            j+=byte_pos-old_byte_pos;
      }
    }
}
void   load_Huffman_table(Huffman_table   *HT)
{
    此处是对HT付值的语句;例
    HT-> V[i]   =   ?;
}
由于占用空间太大,我想把结构中的V改成指针,然后动态分配65536,不用后马上释放.
typedef   struct{
      unsigned   char   Length[17];Huffman   codes   of   length   k
      unsigned   short   int   minor_code[17];  
      unsigned   short   int   major_code[17];    
      unsigned   char   *V;   //此处由于占用静态空间太大,我想改成指针.
}Huffman_table

我把分配V放在了load_Huffman_table中:malloc_Huffman_table(HT);
加了分配和释放内存的函数:
/*释放huffman_table的内存*/
void   free_Huffman_table(Huffman_table   *HT)
{
//if(HT-> V)  
//{
    CMyString_free(HT-> V);
    HT-> V   =   0;
//}
}
/*分配huffman_table内存*/
void   malloc_Huffman_table(Huffman_table   *HT)
{
      HT-> V   =   (unsigned   char*)CMyString_malloc(65536);   //256*256
}
这样也能编译过,结果值也正确.但是我感觉分配了4次,但只释放了一次.而且分配后不释放占用的空间还是很大.

哪位高人帮忙指点一下,怎样改最好,要求占用的空间最小.谢谢

[解决办法]
程序的写法没有问题。记得申请了多少个Huffman_table,就释放多少次就OK了。。
至于你感觉到只释放了一次,应该是因为标准库的内存池引起的。通过malloc申请的内存,在调用free之后,并不是直接归还给操作系统,而是划归到程序的未用内存池当中。当应用程序下次再malloc申请内存的时候,就不用再向操作系统申请了,会直接从未用内存池当中取出一块来使用。这样一来,你就会看到,虽然已经调用了free,可以似乎内存并没有归还给操作系统。

我觉得8个表总共才占用了512K字节空间,只要你的程序不是运行在嵌入式系统里,这根本不算什么啊。相反,你现在动态申请,反而会影响系统的性能。

热点排行