- 论坛徽章:
- 0
|
我看了,linux下,c++: 3.4.3:
string -> basic_string -> allocator: 继承自 ___glibcxx_base_allocator
而#define ___glibcxx_base_allocator __gnu_cxx::new_allocator
而 __gnu_cxx::new_allocator 我在/usr/include/c++/3.4.3/下,
在/usr/include/c++/3.4.3/ext/>new_allocator.h :
__gnu_cxx::new_allocator - An allocator that uses global new, as per [20.4].
- // NB: __n is permitted to be 0. The C++ standard says nothing
- // about what the return value is when __n == 0.
- pointer
- allocate(size_type __n, const void* = 0)
复制代码
- { return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp))); }
复制代码
因此,我觉得会出现内存碎片问题,因为STL中string缓冲区的分配是直接使用 new 分配的:<
而且我测试:
client -> server
发送数据包,异步方式
client端有个包缓冲池,大小为20000,包中的每个字段都是string类型的,并且每个字段我都reserve(21),而且包的赋值也是用pkt.field1 = field1.c_str()
发包一共:17780000个,以下是VmRss的变化:
VmRSS: 12172 kB
VmRSS: 12196 kB
VmRSS: 12200 kB
VmRSS: 12208 kB
VmRSS: 12216 kB
VmRSS: 12220 kB
VmRSS: 12224 kB
VmRSS: 12228 kB
VmRSS: 12232 kB
VmRSS: 12236 kB
VmRSS: 12240 kB
VmRSS: 12244 kB
VmRSS: 12248 kB
VmRSS: 12264 kB
VmRSS: 12268 kB
VmRSS: 12316 kB
VmRSS: 12320 kB
VmRSS: 12328 kB
[ 本帖最后由 dzbjet 于 2006-8-4 15:47 编辑 ] |
|