C 虚拟结构,严格别名和静态初始化

问题描述

我的第一个问题没有很好地表述,所以再次提出,这一次,更多地提出和解释。

我想隐藏结构的变量,同时能够在堆栈上静态初始化结构。大多数解决方案都使用不透明的指针习惯用法和动态内存分配,这并不总是需要的。

这个例子的想法来自以下帖子:

https://www.reddit.com/r/C_Programming/comments/aimgei/opaque_types_and_static_allocation/

我知道这可能是 ub,但我相信它应该适用于大多数消费者架构:32 位或 64 位。

现在您可能会告诉我,有时 size_t 可能比 void * 大,并且 void * alignment 中的 union 迫使 union 对齐成为那个sizeof(void *) 可能是错误的,但通常情况并非如此,也许它可能会发生,但我认为这是例外而不是规则。

基于大多数编译器添加填充以根据您的架构将其对齐为 4 或 8 的倍数的事实,并且 sizeof 返回正确大小的填充、sizeof(Vector) 和 {{1 }} 应该相同,并且基于 sizeof(RealVector)Vector 具有相同对齐的事实,它也应该没问题。

如果这是 RealVector,我如何以安全的方式在 ub 中创建一种便笺结构?在 C++ 中,我们有 Calignasalignof,它们有助于使这种考验更加安全。

如果在 placement new 中无法做到这一点,在 C99 中使用 C11alignas 是否会更安全?

alignof

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)