vector释放内存方式

【C/C++笔记】之vector的clear和swap清除元素的区别以及用shrink_to_fit()优化空间_醉逍遥_祥的博客-CSDN博客

最开始遇到程序内部内存占用随着数据接收一直在增长,后续通过查看代码是vector一直在push_back() , 但是没有释放

尝试一:添加了vector的clear()方式清理内存,添加后内存占用还是无变化,只有在kill掉进程后内存占用才会下降(后续才知道clear()只是清理了vector内部元素,但是申请的空间未释放)。

尝试二:使用vector的swap()清理掉内存,但是内存依旧无变化。

尝试三:再仔细看每个vector的内部数据结构,发现vector_A的数据是使用malloc申请的内存,故需要特殊处理,free()掉其中每个元素,此次操作后内存占用依旧无变化。

尝试三: 在一段段屏蔽代码后发现vector_A在push_back()的时候发生了拷贝,然后临时变量未free,后续添加了临时变量的释放,程序内存占用问题得到解决(其中比较费解的是临时变量没有free掉,为什么会影响vector_A以及其他vector内存的清理)。

#include 

struct test_data{
    int* a;
    int* b;
}

typedef laser_data* LDP;
int* alloc_int_array(int n, int def);

LDP ld_alloc_new(int nrays) {
	LDP ld = (LDP) malloc(sizeof(struct test_data));
	ld_alloc(ld, nrays);
	return ld;
}


int* alloc_int_array(int n, int def) {
	int *v = (int*) malloc(sizeof(int)*n);
	int i=0; for(i=0;ia= alloc_int_array(nrays, 0);
    ld->b= alloc_int_array(nrays, 0);
}

void ld_free(LDP ld) {
	ld_dealloc(ld);
	free(ld);
}

void ld_dealloc(struct test_data*ld){	
	free(ld->a);
	free(ld->b);
}

void clear_vector(std::vector& ld_v){
    for(auto e : ld_v){
        ld_free(e);
    }
    std::vector().swap(ld_v);
    ld_v.clear();
    ld_v.shrink_to_fit();
}

int main()
{
    LDP single_ldp = ld_alloc_new(10);
    std::vector laser_data1;
    laser_data1.push_back(single_ldp);
    clear_vector(laser_data1);
}

你可能感兴趣的:(c++,数据结构)