相关疑难解决方法(0)

什么是严格别名规则?

当询问C中常见的未定义行为时,灵魂比我提到的严格别名规则更加开明.
他们在说什么?

c strict-aliasing undefined-behavior type-punning

778
推荐指数
10
解决办法
19万
查看次数

C中的结构内存布局

我有一个C#背景.我非常喜欢像C这样的低级语言.

在C#中,struct默认情况下由编译器布局内存.编译器可以隐式地重新排序数据字段或填充字段之间的附加位.因此,我必须指定一些特殊属性来覆盖此行为以获得精确布局.

AFAIK,C struct默认情况下不重新排序或对齐a的内存布局.但是,我听说有一个很难找到的例外.

什么是C的内存布局行为?什么应该重新订购/对齐而不是?

c struct memory-layout

76
推荐指数
3
解决办法
9万
查看次数

struct members内存布局

如果我有这样的结构:

struct S {
    ANY_TYPE a;
    ANY_TYPE b;
    ANY_TYPE c;
} s;
Run Code Online (Sandbox Code Playgroud)

我可以安全地假设以下假设在所有平台上始终都是正确的吗?

((char *)&s.a) < ((char *)&s.c)
((char *)&s.a + sizeof(s.a) + sizeof(s.b)) <= ((char *)&s.c)
Run Code Online (Sandbox Code Playgroud)

在C++中呢?

c c++

8
推荐指数
2
解决办法
8005
查看次数