问题描述
我的第一个问题没有很好地表述,所以再次提出,这一次,更多地提出和解释。
我想隐藏结构的变量,同时能够在堆栈上静态初始化结构。大多数解决方案都使用不透明的指针习惯用法和动态内存分配,这并不总是需要的。
这个例子的想法来自以下帖子:
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++ 中,我们有 C
、alignas
和 alignof
,它们有助于使这种考验更加安全。
如果在 placement new
中无法做到这一点,在 C99
中使用 C11
和 alignas
是否会更安全?
alignof
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)