gpt4 book ai didi

c++ - C++ 中的内存对齐语法

转载 作者:行者123 更新时间:2023-11-30 04:44:16 24 4
gpt4 key购买 nike

什么决定了 C/C++ 内存对齐语法?

我正在开发一些需要内存/数据对齐的嵌入式应用程序。根据我以前的经验,对于 C 代码,使用 GCC 和 MSVC,内存对齐语法似乎主要由编译器决定:

GCC   __attribute__ ((aligned (128)))
MSVC __declspec(align(128))

我很好奇以下问题:

  1. 对齐语法是否还取决于其他因素,例如操作系统的目标硬件和/或数据模型?还是完全依赖在编译器上?
  2. 对于 C++11,新语法 alignas(128) 是 C++11 的一部分标准并因此独立于编译器/平台?
  3. 对于 C++11,当我们对数据使用 std::align 时,它会做一个完整的数据吗?复制从而阻碍性能?

最佳答案

  1. 语法不会根据目标的不同而改变。
  2. 是的,alignas自 C++11 以来是 C++ 关键字,但请注意:

    If the strictest (largest) alignas on a declaration is weaker than the alignment it would have without any alignas specifiers (that is, weaker than its natural alignment or weaker than alignas on another declaration of the same object or type), the program is ill-formed

    由于类型在不同平台上有不同的对齐方式,这可能适用于一个目标平台而对另一个目标平台失败:

    struct alignas(2) foo { int bar; };
  3. 不,std::align不复制数据。如果需要,它会修改指针和 size_t 空间计数器。

    If the buffer is too small, the function does nothing and returns nullptr

关于c++ - C++ 中的内存对齐语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57881864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com