1. 内存布局对比(以 std::vector<int>
为例)
(1) MSVC 的实现
cpp
class vector {int* _Myfirst; // 指向首元素的指针int* _Mylast; // 指向最后一个元素的下一个位置int* _Myend; // 指向分配容量的末尾// Debug 模式下可能包含额外字段(如迭代器校验) };
-
内存占用:
-
Release 模式:12 字节(32位)或 24 字节(64位)。
-
Debug 模式:可能增加调试字段(如
_Container_proxy
)。
-
(2) GCC 的实现
cpp
struct _Vector_impl {int* _M_start; // 指向首元素int* _M_finish; // 指向最后一个元素的下一个位置int* _M_end_of_storage; // 指向分配容量的末尾 };
-
内存占用:
-
固定 12 字节(32位)或 24 字节(64位),无调试模式额外开销。
-
2. 核心差异
特性 | MSVC | GCC |
---|---|---|
内存增长策略 | 1.5 倍扩容(近似) | 2 倍扩容 |
调试信息 | Debug 模式添加迭代器校验 | 无额外调试字段 |
内存对齐 | 可能插入填充字节 | 紧密排列,无填充 |
代码生成 | 保守优化,兼容性优先 | 激进优化(如内联更多操作) |