Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
执行C+的单个实例+;字符串是否使用相同的分配器? 我一直在想,如果我在C++代码中使用的代码> STD::String 的实例使用相同的分配器,或者它们有自己的独立内存池吗?_C++_Stl_Memory Management - Fatal编程技术网

执行C+的单个实例+;字符串是否使用相同的分配器? 我一直在想,如果我在C++代码中使用的代码> STD::String 的实例使用相同的分配器,或者它们有自己的独立内存池吗?

执行C+的单个实例+;字符串是否使用相同的分配器? 我一直在想,如果我在C++代码中使用的代码> STD::String 的实例使用相同的分配器,或者它们有自己的独立内存池吗?,c++,stl,memory-management,C++,Stl,Memory Management,显然,跨多个频繁创建和销毁的字符串共享单个内存池更有效。有人能帮我确认或否认吗?默认情况下,他们都使用std::allocator,它使用标准内存例程获取空闲堆块。此层上不涉及池 (然而,大多数堆实现使用专用的低碎片堆来服务小的分配,字符串最有可能属于这一类。但这取决于实现,而不是专用于std::strings…)或针对std::strings…)进行优化)< P>不同的C++实例使用相同的分配器,如果你不指定一个。您可能指的是java/python等标准的字符串内部处理。如果是,则不是。这方面

显然,跨多个频繁创建和销毁的字符串共享单个内存池更有效。有人能帮我确认或否认吗?

默认情况下,他们都使用
std::allocator
,它使用标准内存例程获取空闲堆块。此层上不涉及池


(然而,大多数堆实现使用专用的低碎片堆来服务小的分配,字符串最有可能属于这一类。但这取决于实现,而不是专用于
std::string
s…)或针对
std::string
s…)进行优化)

< P>不同的C++实例使用相同的分配器,如果你不指定一个。您可能指的是java/python等标准的字符串内部处理。如果是,则不是。这方面没有“标准”工具。但是,如果频繁创建/销毁是一个问题,则很容易添加


同一分配器的不同实例,但从C++03开始,给定分配器类型的所有实例都是等效的,即应该能够取消分配由另一个分配器分配的内存。这通常意味着它们实际上从同一个位置分配和取消分配。C++0x中的这个更改。谢谢,这正是我想知道的。