最近在公司实习的时候,需要做一些图像算法速度优化工作。在进行内核(kernel)重组的时候,简单来说就是将一组数据进行统计处理,求出该数组中相同系数的个数以及其在数组中的位置。按照C/C++语言的思维,由于不知道某个系数的个数,所以我们不能确定保存改系数位置所需的内存空间,自然会想到用动态内存分配的方法,即用new和delete(C语言是malloc和free)在程序运行过程中动态创建所需的内存空间。而在C++中用vector容器进行操作更加的方便。于是就有了如下的vector构造代码:
//定义内核重组的系数信息集合容器
typedef vector<int> VEC_POINT; //定义坐标的vector容器
typedef struct _coef_info //每个系数的信息集合
{
float coef; //系数
int num; //该系数个数
VEC_POINT vecXPoint; //该系数在内核中的x坐标

本文探讨了在C/C++中栈、堆和静态变量的访问效率问题。在图像处理优化工作中,使用堆(如vector)导致算法执行时间从10ms增加到12s。通过分析内存管理和数据结构,了解到栈的访问速度快于堆,因为栈由系统直接支持,而堆的分配和管理更为复杂。汇编代码显示栈操作直接涉及寄存器,而堆操作需要额外寻址步骤。全局变量(数组)的使用虽浪费内存,但访问速度较快,验证结果显示其速度在9ms左右。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



