首页 > 后端开发 > C++ > 正文

C 标准是否保证'std::array”的大小和内存布局?

Barbara Streisand
发布: 2024-11-24 10:49:12
原创
443 人浏览过

Does the C   Standard Guarantee the Size and Memory Layout of `std::array`?

std::array 的大小是否由标准强制执行?

在 C 11 中,std::array 保证具有连续性存储和性能超越或等于常规阵列。然而,问题仍然存在:标准是否明确定义了 std::array 的大小和内存布局?

探索标准的要求

标准定义了 std:: array 作为一个聚合,可以使用语法初始化:

std::array<T, N> a = { initializer-list };
登录后复制

作为一个聚合,std::array 不能使用构造函数来转换来自初始化列表的数据。这意味着数组主要存储值本身。

与预期行为的可能偏差

技术上,该标准并不禁止某些潜在偏差:

  • 辅助数据存储: std::array 可以保留额外的内存超出指定值,允许在数据写入超出数组边界时进行错误检测。
  • 对齐差异: 与内置函数相比,编译器可能会对 std::arrays 应用不同的对齐或填充数组,特别是用于支持高级对齐要求。

编译器变体

尽管标准含糊不清,但在 GNU 和 Intel 等主要编译器中的实际使用表明 std::array 的大小和内存布局镜像了常规数组的大小和内存布局。

std::vector< std::array<int, N> > x(M);
typedef int (*ArrayPointer)[N];
ArrayPointer y = (ArrayPointer) &x[0][0];
// Safe multidimensional array-like usage
登录后复制

它是值得注意的是,虽然此代码按预期运行,但并不能保证所有实现都遵循此模式。因此,在关键任务代码中依赖这种行为是不可取的。

以上是C 标准是否保证'std::array”的大小和内存布局?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板