Delphi XE2中函数内常量数组何时创建?单次还是每次调用?
Delphi XE2函数内常量数组的创建时机
在Delphi XE2中,函数内部声明的常量数组只会被初始化一次,而非每次函数调用时重新创建。
Delphi里这类带显式初始化值的静态常量,会在程序启动阶段就完成初始化:
- 对于值类型常量,直接存储在程序的只读数据段;
- 对于字符串这类引用类型,程序启动时会完成字符串内容的加载,并初始化数组中每个元素的字符串结构。
无论你调用多少次包含该常量的函数,这个数组都不会被重复创建或初始化,函数每次执行时都是直接使用已经存在的常量数组。
结合你的示例代码:
function Something; const Arr: array[0..100] of string = ('string1', 'string2'...); begin end;
这里的Arr数组属于静态常量,数组内的字符串内容在程序启动时就已固定,函数调用时只是直接引用这个已初始化完成的数组,不会产生额外的创建或初始化开销。
需要注意的是,如果是用var声明的变量数组,或是动态数组,才会在每次函数调用时分配内存并初始化——但你这里用const声明的静态数组完全不存在这个问题。
内容的提问来源于stack exchange,提问作者Wolf Poncho
相关产品推荐
相关产品推荐

