c++ - 一维数组对二维数组的大小影响
问题描述
以下声明大型数组的方式之间是否存在性能或大小差异 -
int a[4000][4000]
和int a[4000 * 4000]
?如果可能,我们应该更喜欢其中一个吗?
解决方案
内存布局差异为零。
访问速度应该没有差别,但是需要测量才能确定。
一维阵列更加通用。如果您想创建一个可以接受不同大小数组的函数,那么您可以简单地使用 1D 数组void foo(int *arr, std::size_t w, std::size_t h)
。但是对于 2D 数组,没有好的解决方案。即使它们的内存布局相同,尝试将 2D 数组传递给这样的函数也会导致 UB,因为标准是这样说的。
如果您稍后决定要在堆上分配数组,则使用一维数组进行转换会更容易,因为您可以保持相同的[]
语法。对于二维数组,您要么必须使用指向数组的指针数组(效率较低),要么编写一个包装一维数组和重载的类operator[]
(这是正确的做法,但需要时间)。
推荐阅读
- php - WordPress 阻止重新提交表单
- javascript - 猫头鹰旋转木马防止点击拖动
- git-merge - 吉特。如何在合并不必要的提交的情况下更新功能分支?
- pandas - 尝试使用 Panda Dataframe 保存 Ipyleaflet Map 时出现 Object Column is not Serializable 错误
- android - ArrayAdapter 大小为 2 但 editText 为空
- php - 多键多条件查询
- python - 如何获取 Tensorflow 预取/缓存数据集的批量大小?
- r - 许多具有不同颜色的曲线的简单图
- android - 禁用 html 输入的自动完成
- java - 无法从 jsoup 中的 div span 元素获取文本