|
|
1
3
这是一个误导性的说法。如果在文件范围内声明
则阵列的大小为10。时期编译器可能会在的存储之前或之后留下未分配的空间
如果声明包含数组的结构:
那么编译器可以在结构之间进行填充布局
类似的情况也适用于元素类型本身具有大于1字节的对齐要求的数组。可以指定数组的开头,以便之前有未使用的空间,但该空间不是数组的一部分。
同一数组的元素之间肯定不会有填充。C和C++都非常清楚这一点,你引用的源代码并没有说其他的。 |
|
2
2
您所指的问题与结构填充有关,而不是C或C++中数组元素之间的填充。在这种情况下,填充是指在结构成员之间插入未使用的字节,以便在内存中正确对齐它们。 在数组的情况下,元素被连续存储在内存中,它们之间没有任何填充。每个元素占用其数据类型所需的确切空间量。 你在书中提到的那段话“ 编译器:原理、技术和工具 “正在讨论结构填充,它与数组没有直接关系。在处理结构时,编译器可能会在成员之间插入填充字节,以根据目标机器体系结构的对齐要求进行对齐。这种对齐可以提高性能,因为某些处理器可能对某些数据类型有对齐限制。 |
|
|
3
1
您引用的文本谈到(a)某些整数类型所需的对齐方式,以及(b)字符数组后的填充。提到两种不同的类型表明填充不是针对字符数组的,而是针对某个整数类型的。这方面的线索在你引用之前的一段中,它的结尾是:
因此,引用可能会讨论聚合中的填充。字符数组本身不需要任何填充,但如果它在一个也具有整数类型的结构中,则可能需要在字符数组之后进行填充,以便该结构的下一个成员具有所需的对齐(或者整个结构具有使其大小为其成员的对齐要求的倍数所需的大小)。引用也可能是在讨论通常放置多个对象,例如排列编译器将放置在堆栈空间或其他存储中的几个对象。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |