cri*_*ron 1 c++ iterator vector sizeof g++4.8
以下运行程序在g++ 4.8.232位Linux系统上给出了输出12:
vector<char> v;
cout << sizeof(v) << endl;
Run Code Online (Sandbox Code Playgroud)
我看到了这一点,并知道这sizeof(v)可能是特定于实现的.不过,我想知道什么可能导致该载体的大小为12.我认为是,迭代器v.begin()和v.end()可能是导致8个字节的大小.我对么?如果是的话,剩下的4个字节的大小是什么?如果没有,这12个字节到底是什么?
看看消息来源.libstdc++是gcc下载的一部分.
无论如何,容器必须有这些成员:
char*.size_t或4个字节char*.size_t或char*.[[no_unique_address]]代替.从理论上讲,如果不是指针,2和3可能会更小.虽然这会很奇怪,因为它会限制最大尺寸.
正如预期的那样,共12个字节.
将64位实现的大小加倍.
通常 std::vector 具有:
1. Start of allocation / begin
2. End of vector (begin + size)
3. End of allocation (begin + capacity)
Run Code Online (Sandbox Code Playgroud)
所以大小 12 在 32 位机器上是相当合理的。