我想了解当动态数组的大小增加时会发生什么.
到目前为止我的理解:
当数组大小增加时,是将额外的内存添加到现有的内存块上,还是将现有的元素复制到一个全新的内存块?
更改动态数组的大小是否会影响引用现有数组元素的指针?
谢谢,
[编辑]错误的假设被打破了.(新数组元素初始化为0)
Mar*_*ema 10
当数组大小增加时,将复制该数组.从doc:...为数组赋值或将其传递给SetLength过程时,将重新分配动态数组的内存.
所以,是的,增加动态数组的大小确实会对引用现有数组元素的指针产生影响.
如果要保留对现有元素的引用,请在数组中使用它们的索引(从0开始).
更新
Rob和David的评论促使我检查了Delphi5中动态数组的初始化(因为我还是可以随时使用).首先使用一些代码创建各种类型的动态数组并在调试器中检查它们.它们都已正确初始化,但这可能仍然是在分配它们的内存位置初始化之前的结果.所以检查了RTL.事实证明,D5已经在Dyn指向的DynArraySetLength方法中具有FillChar语句:
// Set the new memory to all zero bits
FillChar((PChar(p) + elSize * oldLength)^, elSize * (newLength - oldLength), 0);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
782 次 |
| 最近记录: |