关于Setlength 小弟用SetLength为一个字符串变量分配空间,SetLength(str,200000);因为分配的空间比较大,用完后,用SetLength(str,0)将变量所占的空间释放掉,但这样频繁的循环操作,经过一段时间,内存溢出,请问各位大侠,用完变量后,怎样才能立即的将变量所占的空间释放掉呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 释放是用free。再说一个string变量不用分配内存,也不用自己释放啊。 str.free就可以适释放掉了setlength是分配的,又不是释放 字符串不用释放.再说也没有free这个方法.对象就用free了.. string 为生存期自管理类型,自动释放。 给str分配空间,是因为要使用的函数,必须在使用之前给它分配一个较大的空间,因为调用该函数的频繁很高,而且每次使用前都得重新分配,所以用完后得把它释放掉....我用的是SetLength(str,0);但这样做看起来效果不是很明显... string 为生存期自管理类型,自己会释放啊 -_-# str.free; 这样也行,楼上几个牛人真弓虽string内存是Delphi自己管理的,你不用担心这块,倒是写代码时要注意以下几个问题:1.string变量可看成一个指针,指向String内容(如'ABC')所在的内存块。2.Delphi对这个内存块采用的是引用计数管理,这个引用计数的位置在'ABC'首内存地址-1的地方。3.明白上面两点后,就可知,如果你的str是function内变量,出了function范围,相关字符串的引用计数自然就-1。4.如果用string做为函数参数,并且不需要改变它的话,推荐使用Const修饰符。5.如果你用SetLength去分配String的内存,用SetLength(str,0)就没错, str := '';也可以。如果没有回收那估计是某个地方你用了strTemp := str;这样的语句让那块内存的引用计数+1了。 不需要自己释放,setlength直接用就行了,谁告诉你内存溢出了,不可能的事情。 N个人都说了string不用释放,而且根本没有free这个方法,对象才有。 SQL查询并合并到一个表中 rave报表中如何显示全部字段 大家试用下我写的邮件搜索程序,多线程的,看有什么问题 95老大进来接分! 如何自定义设置MaskEdit中的EditMask属性 在DELPHI中的INTTOHEX函数,在VB是什么函数呢? 3389端口是做什么用的? 如何进行锁屏,关机? 谁有字符串通配符匹配的算法(例如*.txt可以匹配a.txt和b.txt)? 如何得知系統中所有的盤符??? 窗口变化问题:非常实用,也常见的问题 怎样可以实现安装IE工具栏后,直接把它调出到IE上?
setlength是分配的,又不是释放
因为调用该函数的频繁很高,而且每次使用前都得重新分配,所以用完后得把它释放掉....
我用的是SetLength(str,0);
但这样做看起来效果不是很明显...
1.string变量可看成一个指针,指向String内容(如'ABC')所在的内存块。
2.Delphi对这个内存块采用的是引用计数管理,这个引用计数的位置在'ABC'首内存地址-1的地方。
3.明白上面两点后,就可知,如果你的str是function内变量,出了function范围,相关字符串的引用计数自然就-1。
4.如果用string做为函数参数,并且不需要改变它的话,推荐使用Const修饰符。
5.如果你用SetLength去分配String的内存,用SetLength(str,0)就没错, str := '';也可以。如果没有回收那估计是某个地方你用了strTemp := str;这样的语句让那块内存的引用计数+1了。