CArray::SetSize 的用法
来源:互联网 发布:大连软件职业学院地址 编辑:程序博客网 时间:2024/05/19 07:26
CArray 使用不当会产生内存碎片,应先调用SetSize(),MSDN和网友都这么说,但具体怎么用还不是太清楚,先看代码:
// 1. 声明arr1后直接加CArray<int> arr1;arr1.Add( 1 );TRACE( "1, 0x%x, ", &arr1[0] );arr1.Add( 2 );TRACE( "0x%x, %2i\r\n", &arr1[0], arr1.GetCount() ); // 显示第一个元素的地址变化// 2. 声明后设置大小CArray<int> arr2;arr2.SetSize(2);arr2.SetAt( 0, 1 );TRACE( "2, 0x%x, ", &arr2[0] );arr2.SetAt( 1, 2 );TRACE( "0x%x, %2i\r\n", &arr2[0], arr2.GetCount() ); // 显示第一个元素的地址变化// 3. 声明后设置预留大小CArray<int> arr3;arr3.SetSize( 0, 80 );arr3.Add( 1 );TRACE( "3, 0x%x, ", &arr3[0] );for( int i = 0; i < 79; i++ )arr3.Add( 2 );TRACE( "0x%x, %2i\r\n", &arr3[0], arr3.GetCount() ); // 显示第一个元素的地址变化
运行结果:
1, 0x2bcf58, 0x2bcf98, 2
2, 0x2b9e78, 0x2b9e78, 2
3, 0x2b9ec0, 0x2b9ec0, 80
从以上结果看出,第一种方法未用SetSize是错的,执行arr1.Add( 2 )时会重新给第一项分配内存,内存地址变了(0x2bcf58, 0x2bcf98),第二、三种方法正确,添加元素时,不重新分配内存,内存地址不变。
说明:
void SetSize( INT_PTR nNewSize, INT_PTR nGrowBy = -1 );
nNewSize 分配数组元素,用SetAt方法初始化元素。
nGrowBy 预留一定空间,GetSize方法取不到这一部分,用Add方法加元素。
总结:
使用数组前先用SetSize分配空间。
如果已知数组大小,用SetSize(50)方法分配内存,再用SetAt方法初始化。
如果不确定数组大小,用SetSize(0, 100)方法预留内存,用Add方法初始化,第二个参数可以取大些,保证够用。
1 0
- CArray::SetSize 的用法
- CArray的用法
- CArray的用法
- CArray的用法
- CARRAY的常用用法
- CArray的用法
- CArray的用法
- CArray的用法
- CArray的用法
- CArray的用法
- CArray的用法
- CArray的用法
- CArray的用法
- setPreferredSize和setSize的区别及用法
- setPreferredSize和的setSize和setbounds的用法
- CArray 用法
- CArray用法
- 【Swing基础】setPreferredSize和setSize的区别及用法
- pass2word例子---------------启动密码存储
- C# 直接打印指定路径文件 + 可选择指定打印机
- 2014.3.18
- String,StringBuilder与StringBuffer的区别
- 简单介绍抽屉效果
- CArray::SetSize 的用法
- macro
- Visual Studio 中两个窗体(WinForm)之间相互传值的方法
- Nexus5设备ROOT
- mysql 锁优化
- GC是什么?为什么要有GC?
- 自由变换相机远近、旋转和平移
- Schematron
- xcodebuild 使用手册