读书人

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

发布时间: 2012-02-14 19:19:19 作者: rapoo

数组和指针最小化内存的问题
原程序中有这样一段代码:
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字节空间,只要你的程序不是运行在嵌入式系统里,这根本不算什么啊。相反,你现在动态申请,反而会影响系统的性能。

读书人网 >C语言

热点推荐