C++笔记之类型大小、变量大小,vector与string在栈上内存、堆上内存和总内存的关系
code review!
文章目录
- C++笔记之类型大小、变量大小,vector与string在栈上内存、堆上内存和总内存的关系
- 1.`std::vector<float>` 的内存占用
- 2.`std::vector<float>` 的 `capacity` 和 `size` 关系
- 3.如何测量 `std::vector<float>` 的实际内存占用?
- 3.1.元数据占用
- 3.2.堆内存占用
- 3.3.总内存占用
- 4.总结
- 5.`sizeof` 的作用
- 6. 数据类型的大小
- 6.1.常见基本数据类型的大小(以字节为单位)
- 6.2.说明
- 7.某种数据类型的变量的大小
- 7.1.内存对齐的影响
- 8.三者的关系
- 9.常见问题解答
- 9.1.为什么 `sizeof` 结果可能包含补齐字节?
- 9.2.多平台下数据类型的大小是否一致?
- 9.3.如何避免结构体的内存浪费?
- 9.4.如何强制让变量紧凑存储?
- 9.5.总结
- 10.std::string 的内存结构和大小计算
- 10.1.`sizeof(str)` 与 `str.size()` 的区别
- 10.1.1.`sizeof(str)`
- 10.1.1.2 `str.size()`
- 10.2.内存占用分析:`std::string` 的堆内存和栈内存
- 10.2.1.栈上内存
- 10.2.2.堆上内存
- 10.2.3.小字符串优化(SSO)示例
- 10.3.总结:`sizeof(str)` 与 `str.size()` 的关系
- 10.4.扩展:计算 `std::string` 的总内存占用
- 10.4.1.如何计算 `std::string` 的总内存占用?
- 10.4.2.示例代码:计算总内存
- 10.5.总结核心点
1.std::vector<float>
的内存占用
std::vector
是一个动态数组,它的内存分为两部分:
-
固定大小的元数据部分:
- 包括指向元素存储的指针、当前存储的元素个数(
size
)、以及分配的容量(capacity
)等。 - 这部分的大小是固定的,与
std::vector
的模板参数(如float
)无关。 - 通常在 64 位系统上,这部分占用 24 字节(3 个指针大小,每个 8 字节)。
- 可以通过
- 包括指向元素存储的指针、当前存储的元素个数(