新的内存分配
来源:互联网 发布:手机淘宝购物车 编辑:程序博客网 时间:2024/05/29 14:36
注意能力高于字符串的长度!虽然我们的字符串长度8、15个字符的字符串实际上分配足够的内存!为什么这是做了什么?
最重要的认识是,如果用户希望把更多的角色比字符串有能力成一个字符串,该字符串必须重新分配一个更大的容量。例如,如果一个字符串长度和容量8,然后添加任何字符字符串将迫使重新分配。通过能力大于实际的字符串,这给用户一些缓冲的空间扩大字符串之前需要进行重新分配。
事实证明,重新分配是不好的几个原因:
首先,重新分配一个字符串是相对昂贵的。首先,必须新的内存分配。然后字符串中的每个字符必须复制到新的内存。这可能需要很长时间如果字符串是大的。最后,旧的记忆已经被收回。如果你正在做许多reallocations,这个过程可以显著延缓你的程序。
第二,无论何时重新分配一个字符串,字符串的内容改变到一个新的内存地址。这意味着所有引用、指针和迭代器的字符串变成无效!
注意,并非总是如此,字符串将被分配能力大于长度。考虑下面的程序:
1
2
3
string sString(
"0123456789abcde"
);
cout <<
"Length: "
<< sString.length() << endl;
cout <<
"Capacity: "
<< sString.capacity() << endl;
这个程序输出:
长度:15
能力:15
(结果可能取决于编译器)。
让我们添加一个字符字符串和观察的能力改变:
1
2
3
4
5
6
7
8
string sString(
"0123456789abcde"
);
cout <<
"Length: "
<< sString.length() << endl;
cout <<
"Capacity: "
<< sString.capacity() << endl;
// Now add a new character
sString +=
"f"
;
cout <<
"Length: "
<< sString.length() << endl;
cout <<
"Capacity: "
<< sString.capacity() << endl;
由此产生的结果是:
长度:15
能力:15
长度:16
容量:31
空字符串:储备()
空字符串::储备(size_type unSize)
第二味这个函数集的容量字符串至少unSize(它可以更大)。请注意,这可能需要重新分配。
如果第一个味道的函数被调用时,或者第二个味道叫做unSize不到目前的能力,该函数将试图收缩能力匹配长度。这是一个不具约束力的请求。
示例代码:
意见与反馈
翻译结
1
2
3
4
5
6
7
8
9
10
11
string sString(
"01234567"
);
cout <<
"Length: "
<< sString.length() << endl;
cout <<
"Capacity: "
<< sString.capacity() << endl;
sString.reserve(200);
cout <<
"Length: "
<< sString.length() << endl;
cout <<
"Capacity: "
<< sString.capacity() << endl;
sString.reserve();
cout <<
"Length: "
<< sString.length() << endl;
cout <<
"Capacity: "
<< sString.capacity() << endl;
0 0
- 新的内存分配
- vector的内存分配 新理解
- weblogic的内存分配
- 关于内存的分配
- C++的内存分配
- C++的内存分配
- 程序的内存分配
- 程序的内存分配
- 程序的内存分配
- 内存的分配方式
- C++的内存分配
- postgresql的内存分配
- 程序的内存分配
- java的内存分配
- 程序的内存分配
- 程序的内存分配
- 程序的内存分配
- 程序的内存分配
- ubuntu 12.04 如何设置和优化开机启动的程序
- 未抛出的原因是在catch中使用了return语句,导致异常无法抛出insert*方法之外
- C#里的方向键消息捕获
- IOS推送机制与实现详解
- Python - 文本处理模块
- 新的内存分配
- 一个box2d中的工具类,拿过来直接用的那种
- linu 下 apache 安装
- 简单的http抓包(微信公众网页登录模拟)
- 这个请求被忽略
- [Ext JS 4] Extjs 图表 Legend(图例)的分行与分列显示
- 赵雅智_引用开源框架通过AsyncHttpClient查看网页源代码
- 引入library项目相关问题
- DocumentTool