首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二维阵列及其在C++中的性能

二维阵列及其在C++中的性能
EN

Stack Overflow用户
提问于 2013-03-19 12:37:20
回答 2查看 777关注 0票数 1

我想优化一段区域增长的代码,它目前在算法中使用了两个二维数组。一个2D数组保留2D纹理中每个像素的访问状态,而一个2D数组保存每个像素的“应该被屏蔽”的布尔值。

我运行英特尔VTune放大器XE来描述该方法的性能。下面是512x512图像最重要的统计数据:

  • 在array2Dx中查找需要10~15 in
  • 编写array2Dx需要~1-2ms
  • 每个数组的创建和init开销为8-10 per。

此外,我的阅读量和我写的差不多。创建2D数组的方式是最基本的:

代码语言:javascript
复制
bool** array2D = new bool*[desc.Width];
for(unsigned int i = 0; i < desc.Width; ++i)
    array2D[i] = new bool[desc.Height];

for(unsigned int x = 0; x < desc.Width; x++){
    for(unsigned int y = 0; y < desc.Height; y++){
        array2D[x][y] = false;
    }
}

我在寻找更好的结构来保存这些信息。代码示例,以及只是一般的想法(包括。是欢迎的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-19 12:43:42

您可以尝试以牺牲可读性为代价来优化性能,方法是从2D数组切换到一维数组。您可以使用array2D[x][y]代替array[x*Height+y]array[x+y*Width] (行-主要或列-主要顺序),这取决于您的访问模式。这将使您避免单独的分配。

如果数组很大,也可以尝试将布尔值打包成更大的整型。这将使访问代码稍微慢一些,但占用的空间要小得多,可以更好地利用缓存性能来弥补访问速度较慢的问题。

票数 2
EN

Stack Overflow用户

发布于 2013-03-19 12:42:55

将2d数组封装在一维数组中:

代码语言:javascript
复制
type* array = new type[width * height];
array[x + y * width] = data_at_x_y;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15499722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档