以什么为基础的类对象的大小显示为12?
tr -d "\0" < ElapsedTime.txt | tail -c+3 | ...
输出:
<style>
body { width: 400px; }
p { margin-top: 0; margin-bottom: 0.5em; }
blockquote {
background-color: antiquewhite;
padding-top: 0.5em; padding-bottom: 0.5em;
margin-top: 0; margin-bottom: 0.5em;
}
/* Two workarounds */
/*
blockquote { padding-bottom: 1px; }
blockquote { padding-bottom: 0; border-bottom: 1px solid antiquewhite; }
*/
/* Will not work, due to padding/margin collapsing, as I understand */
blockquote { padding-bottom: 0; }
</style>
<p>Some text before blockquotes</p>
<blockquote>
<p><strong>1st blockquote</strong></p>
<p>1st paragraph. Foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo.</p>
<p>2nd paragraph. Bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar.</p>
</blockquote>
<blockquote>
<p><strong>2nd blockquote</strong></p>
<p>1st paragraph. Foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo.</p>
<p>2nd paragraph. Bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar.</p>
</blockquote>
<p>Some text after blockquotes</p>
答案 0 :(得分:7)
这样想。让我们想象标准C ++库没有vector
类。你决定拥有一个是个好主意。
你可能至少会想出这样的东西。 (免责声明:C ++的实际矢量类远更复杂)
template <class T>
class vector
{
T* items; // array of items
size_t length; // number of items inserted
size_t capacity; // how many items we've allocated
public:
void push_back(const T& item) {
if (length >= capacity) {
grow(length * 2); // double capacity
}
items[length] = item;
length++;
}
...
};
让我们在32位系统上分解我的简单向量类的实例:
sizeof(items) == 4 // pointers are 4 bytes on 32-bit systems
sizeof(length) == 4; // since size_t is typically a long, it's 32-bits as well
sizeof(capacity) == 4; // same as above
所以只有12个字节的成员变量才能开始。因此sizeof(vector<T>) == 12
就我的简单例子而言。 T
实际上是什么类型并不重要。 sizeof()运算符只考虑成员变量,而不是与每个变量相关的任何堆分配。
以上只是一个粗略的例子。实际的矢量类具有更复杂的结构,支持自定义分配器,以及有效迭代,插入和删除的其他优化。因此,类中可能有更多的成员变量。
所以至少,我的最小例子已经是12个字节。由于sizeof(指针)和sizeof(size_t)通常在64位上加倍,因此64位编译器上可能是24个字节。