导航
  • 主页
  • 招聘
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API
  • 问答

原来声明静态数组不占用内存呀

fj218 2003-12-29 01:11:20
比如
var
a:array [1..10000] of array [1..10000] of int64;
声明后居然不占用内存,而改用动态内存,就会占用。
另外声明一个最大的静态数组该如何写。是不是这样
var
a:array [1..Maxint div 2-1]
...全文
53 点赞 收藏 14
写回复
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
搬运工木木 2004-01-04
倒。。。。看书去吧,看一看静态变量和动态变量在内存中是怎么样分布的
回复
mxk19791116 2003-12-29
呵呵
回复
fj218 2003-12-29
To: qiume(杜克) 我真不知你测试过没有。
我就是这样测试的,内存一点也没变,不信你试。
回复
47522341 2003-12-29
楼主是放分贴就早说吗;^_^
回复
qiume 2003-12-29
肯定占用内存,你可以这样测试:
procedure TForm1.Button1Click(Sender: TObject);
var
a:array [1..10000] of array [1..10000] of int64;
begin

end;

//
1, 打开任务管理器
2,运行你的程序(注意看你的程序占了多少内存)
3,按下Button1,再看任务管理器
4,你发现内存涨了!!!
回复
fj218 2003-12-29
不信,大家可以在程序中声明一个比较大的静态动态数组,然后打开windows任务管理器察看内存变化,运行后没有任何改变。而声明为动态数组,执行setlength后,内存就会减少。我估计静态变量是赋了值后才占用内存。
回复
抱朴守拙 2003-12-29
肯定占内存的。
回复
jackieji 2003-12-29
8可能地,没内存咋运行涅?!
静态声明,是在运行之前就分配好到数据区(内存),他的生存期与整个程序相同;
而动态声明,随时可以释放掉的。
回复
noproblem12 2003-12-29
不可能不占内存的
回复
hch_45 2003-12-29
在var中声明的变量是在栈中分配的,这由编译器对其管理而不是没有分配内存。
回复
fj218 2003-12-29
我已测试过多遍,静态数组声明不占用内存,赋值后才占用,更令人惊讶的是即使是局部声明,静态数组一旦占用内存就不会释放,直到程序退出后才释放。而动态数组可以通过置nil可以释放内存。

回复
delphipan 2003-12-29
搞不懂
回复
jxc163 2003-12-29
?
回复
xinghf 2003-12-29
不可能
回复
发动态
发帖子
Delphi
创建于2007-08-02

4802

社区成员

Delphi 开发及应用
申请成为版主
社区公告
暂无公告