是否保证 Complex Float 变量在内存中按 8 字节对齐?

2023-12-03

在 C99 中定义了新的复杂类型。我试图了解编译器是否可以利用这些知识来优化内存访问。这些物体是(A-F) 类型complex float保证在内存中8字节对齐?


#include "complex.h"
typedef complex float cfloat;

cfloat A;
cfloat B[10];

void func(cfloat C, cfloat *D)
{
    cfloat E;
    cfloat F[10];
}

请注意,对于D,问题与​​所指向的对象有关D,而不是指针存储本身。而且,如果假定这是对齐的,那么如何确定传递的地址是实际的复合地址,而不是来自另一种(非 8 对齐)类型的强制转换?

更新 1:我可能在关于的最后一条评论中回答了自己D指针。 B/c 无法知道函数调用的参数将被分配什么地址,也无法保证它将是 8 对齐的。这可以通过以下方式解决__builtin_assumed_aligned()功能。

对于其他变量,问题仍然悬而未决。

更新2:我发布了后续问题在这里.


A float complex保证与两个数组具有相同的内存布局和对齐方式float(第 6.2.5 节)。具体的对齐方式是由您的编译器或平台定义的。你只能肯定地说float complex is 至少对齐 as a float.

如果假设是对齐的,那么如何确定传递的地址是实际的复合地址,而不是来自另一种(非 8 对齐)类型的强制转换?

如果您的调用者向您传递了一个未充分对齐的指针,则这是未定义的行为,并且是其代码中的错误(第 6.3.2.3 节)。您不需要支持这一点(尽管您可以选择支持)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否保证 Complex Float 变量在内存中按 8 字节对齐? 的相关文章

  • ELF动态符号表

    我有一个关于 ELF 动态符号表的问题 对于 FUNC 类型的符号 我注意到某些二进制文件中的值为 0 但在其他二进制文件中 它具有一些非零值 这两个二进制文件都是由 gcc 生成的 我想知道为什么会出现这种差异 有没有编译器选项来控制这个
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 张量流中的复杂卷积

    我正在尝试运行一个简单的卷积 但包含复数 r np random random 1 10 10 10 i np random random 1 10 10 10 x tf complex r i conv layer tf layers c
  • 避免 gcc 函数序言开销?

    我最近遇到了很多 gcc 在 x86 上生成非常糟糕的代码的函数 它们都符合以下模式 if some condition do something really simple and return else something comple
  • 无法链接 Boost 正则表达式

    我目前正在尝试编译一个KIT 的收缩层次实现 http algo2 iti kit edu english routeplanning php这需要 Boost Regex 提供的 Makefile 已经确保 并且我还手动仔细检查了这一点
  • C++11 Geany 设置

    我正在学习 C 我需要在 Geany 中为 C 11 正确设置编译和构建命令 我以为我的理解是正确的 但是当使用时auto 我收到以下错误 warning auto will change meaning in C 0x please re
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • GCC 的“-Wl,option”和“-Xlinker option”语法之间有区别吗?

    我一直在查看一些配置文件 并且看到它们都被使用 尽管在不同的体系结构上 如果您在 Linux 机器上使用 GCC 将选项传递给链接器的两种语法之间有区别吗 据我所知 阅读 GCC 手册时 他们的解释几乎相同 From man gcc Xli
  • C语言中如何通过内存地址映射函数名和行号?

    如何用 GCC 中的内存地址映射回函数名称和行号 即假设一个 C 语言原型 void func Get the address of caller maybe this could be avoided MemoryAddress get
  • 链接器问题 - 未定义的引用

    我的编译器有问题 告诉我有一个 未定义的引用 我想在库中使用的函数 让我分享一些有关该问题的信息 我正在用 gcc 交叉编译 C 语言 我正在调用一个库函数 该函数通过包含的标头访问 其中包含另一个标头 其中包含原型 我已经使用 I 包含了
  • 如何在 GCC C++ 中编写多行内联汇编代码?

    这看起来不太友好 asm command 1 command 2 command 3 我真的必须在每一行加上双引号吗 另外 由于多行字符串文字在 GCC 中不起作用 我也无法欺骗它 我总是在互联网上找到一些例子 该人手动插入制表符和换行符而
  • 除了 gcc 之外,还有哪些编译器可以对代码进行向量化?

    GCC can 矢量化循环 ftp gcc gnu org pub gcc summit 2004 Autovectorization pdf当指定某些选项并给出正确的条件时 会自动进行 是否还有其他广泛可用的编译器可以执行相同的操作 IC
  • 如何使用timeval结构计算毫秒?

    我想从 timeval 类型的变量中检索以毫秒为单位的值 以下是我的尝试 timeval time long int millis time gt tv sec 1000 time gt tv usec 1000 printf Second
  • 如何编译一个简单的 multiboot2 裸机可执行文件?

    我想开始写一个操作系统内核 然后 我找到了一个document http nongnu askapache com grub phcoder multiboot pdf引入 multiboot2 规范 有三个示例代码文件 名为boot S
  • C 编译器无法在 Mac OS Mountain Lion 上创建可执行文件

    我几乎浏览了每一页 但所有提示都不能解决问题 我正在运行 Mountain Lion 我有 Xcode 所有最新的开发工具 最新的 GCC 等等 我正在尝试设置 rbenv 和 ruby build 一切似乎都正常 但是当我去安装 ruby
  • gcc 链接器库搜索顺序;路径加静态与共享

    通读 gcc 手册 我相信以下两种说法是正确的 在命令行上指定的库搜索路径在 默认 路径之前搜索 我认为这意味着 LIBRARY PATH 环境变量中的内容 共享库将优先于静态库进行链接 在没有标志说明要这样做的情况下 但这两者谁占主导地位
  • C++11 中具有 C 链接的复杂类型

    我需要将 C 库的标头包含到我的 C 11 代码中 现在 标头提供了涉及大量的例程和数据结构double complex到处都是 例如 include
  • 如何使用 mingw gcc 链接 msvcr90.dll?

    如何使用 mingw gcc 链接 msvcr90 dll 我尝试了 lmsvcr90 这是最小的示例 include
  • GCC:如何在 MCU 上完全禁用堆使用?

    我有一个在基于 ARM Cortex M 的 MCU 上运行并用 C 和 C 编写的应用程序 我用gcc and g 编译它并希望完全禁用任何堆使用 在 MCU 启动文件中 堆大小已设置为 0 除此之外 我还想禁止代码中意外使用堆 换句话说
  • 如何构建gcc multilib工具链?

    我正在尝试在新安装的 ubuntu 14 04 的 AMD64 版本上构建 gcc multilib 工具链 它只有 x86 64 gcc 和 g 安装 没有 multilib 支持 我的配置行是 configure disable che

随机推荐