对象表示和运算符 sizeof 的定义
Posted
技术标签:
【中文标题】对象表示和运算符 sizeof 的定义【英文标题】:Definition fo object representation and operator sizeof 【发布时间】:2014-10-07 04:31:18 【问题描述】:对象表示概念的定义在3.9/4中给出:
[基本类型]
类型 T 的对象的对象表示是 N 的序列 类型 T 的对象占用的 unsigned char 对象,其中 N 等于
sizeof(T)
.
但是sizeof
操作符的定义如下:
[expr.sizeof]
sizeof 运算符产生 object 中的字节数 表示它的操作数。
特别是:
当应用于一个类时,结果是一个类中的字节数 该类的对象,包括放置所需的任何填充 数组中该类型的对象
我想通过例子来考虑这个定义:
struct A
int a; //sizeof(a) is implementation defined
long b; //sizeof(b) is implementation defined
char c; //sizeof(c) is 1 by definition
// Padding, problbly equals to 3 butes
sizeof(A)
是如何通过实现计算的?我们只计算sizeof(a) + sizeof(b) + sizeof(c) + padding
的总和。
但是required for placingobjects of that type in an array
的条件是什么?
【问题讨论】:
数组必须是连续的。对象需要正确对齐。 @T.C.所有类型的对象表示是否都期望 窄字符类型 由于 sizeof 而定义的实现是? @T.C.关于我在问题中定义的结构。这意味着实现添加的填充也是未定义的,对吧?那是添加到将结构对象存储到数组中的能力的填充可能足够大。我试着确定,但是 clang 和 gcc 都给出了相同的 sizeof。 【参考方案1】:你简单地计算结构的大小:
long size = sizeof(struct A);
如果你想要一个struct A
的数组,
struct A arr[/* Size of array */];
【讨论】:
以上是关于对象表示和运算符 sizeof 的定义的主要内容,如果未能解决你的问题,请参考以下文章