【发布时间】:2021-11-06 16:34:08
【问题描述】:
我的主要目标是避免动态内存分配。
例如,我可以确定哪些 std::string 方法将/不会分配新的堆内存吗?
有没有办法禁止 std::string 实例进行新分配?
有标准的定长字符串类吗?
【问题讨论】:
-
不,你不能确定。不,没有办法禁止它(好吧,除非你创建自己的分配器类,它实际上不分配任何东西)。不,没有标准的固定长度字符串类,但是自己制作一个很容易,也许包装
std::array? -
不,即使内部进行了小字符串优化,也没有任何保证。 std::string 是 std::basic_string 容器的别名。这个容器有分配器。您可以使用自制分配器定义自己的别名,该分配器不使用 malloc/new 分配堆内存,即从主函数或线程例程顶部声明的某个堆栈数组中获取内存。无论如何,它适用于一些琐碎的流程,更简单的程序需要 C++ 中的堆。
-
IMO 唯一可以保证(按标准?)的是空字符串(即
"\0")不会分配,这本身非常有用。对短字符串优化的任何其他声明或依赖确实只是一个很好的细节,但它不是基本的。
标签: c++ memory-management dynamic-memory-allocation stdstring