VC分配内存问题,实际分配和计算值不符
#include "malloc.h"
#include "stdio.h"
struct Matching_block
{
unsigned char *per_frame;
unsigned **fra_pos;
};
int main()
{
int he_wi = 1920*1080;
int i;
Matching_block*patch_table = NULL;
patch_table = (Matching_block *)calloc( he_wi,sizeof(Matching_block) );
//unsigned char *pe;
if (!patch_table)
{
exit(-1);
}
for (i = 0; i < he_wi; i++ )
{
patch_table[i].per_frame = (unsigned char *)calloc( 1,sizeof(unsigned char) );
patch_table[i].fra_pos = (unsigned **)calloc( 1,sizeof(unsigned *) );
count++;
}
return 0;
}
全部代码如上所示,在分配patch_table[i].per_frame 的这个for里面分配了130M,我自己计算应该是近10M左右的样子,即1920*1080*(4+1)/(1024*1024),不知道为什么会开辟这么大的空间,求助!!! 开辟内存?结构体数组?结构体指针
[解决办法]
每个数组元素都进行一次动态分配,造成大量的内存碎片垃圾。
还有sizeof(Matching_block)应该是4+4个字节,不是4+1.每个指针占4字节
---------------------------------------------------------
预防产生内存碎片:首先,尽量少使用动态内存。在大多数情况下,你可能使用静态或自动存储或者是STL容器。第二,尽量分配大块的内存而不是一次只分配少量内存。举个例子:一次分配一个数组实例所需的内存,而不是一次只分配一个数组元素的内存。
[解决办法]
patch_table[i].per_frame = &pe[5*i]; //类型不匹配
*(patch_table[i].fra_pos) = ...//未初始化便解用
认真研读文档,完全掌握里面定义的数据结构,不能胡猜的...