找回密码
 加入
搜索
查看: 3921|回复: 14

[AU3基础] [已解决]数组 基础观念与想法与内存占用量的问题....

  [复制链接]
发表于 2013-5-13 11:42:06 | 显示全部楼层 |阅读模式
本帖最后由 kk_lee69 于 2013-6-24 22:58 编辑

請教一下 各位高手......
假設  已經有一個資料來源  放入 數組  叫做 $A   占用記憶體 大約 10K 好了
這時候 下一個 語法
$B=$A

這時候 會變成 兩個完全獨立的 數組嗎??  還是 這兩個數組  會有相關???

而此時的記憶體  是會變成  $A 10K   跟  $B  10K  還是  $A+$B  < 20K

$B=$A  這樣子的語法是不是 等同  我的 $B 直接 從資料來源重新取得 是一樣的意思呢??

有差異性嗎??

補充一下:

剛剛測試 6萬筆的 2D 數組

原本程式 運行 佔用記憶體 23328
$A 加上 6萬筆資料後  佔用記憶體 64772
把 $B=$A 之後    佔用記憶體 64780
設定 $A=0  之後  記憶體一樣佔用 64780
在設定 $B=0 之後   記憶體佔用   25450
发表于 2013-5-13 12:16:43 | 显示全部楼层
我的感觉是,$A和$B没有关系,可以相互独立,可以把一个数组$A赋到另一个数组$B,然后把原来的$A清空,然后再显示一下$B看看是不是正常。
内存占用就不得而知了。
 楼主| 发表于 2013-5-13 13:14:14 | 显示全部楼层
回复 2# haijie1223

有實驗過  清空$A 之後 $B 依舊運作正常......
但是內存的占用 看起來是 $A+$B  < 20K  但是想不通的是

如果一個 數組 $A  要占用10K  這時候放另外一個一樣的數組  理論上也要占用10K 為何 會變少.....???

因為變少 讓我懷疑 這兩個是不是獨立的.......
发表于 2013-5-13 13:22:16 | 显示全部楼层
内存占用,你是如何测试的?
发表于 2013-5-13 13:52:44 | 显示全部楼层
查查基址看看
发表于 2013-5-13 14:09:16 | 显示全部楼层
貌似Au本身有内存优化机制?



; 基础占用
Local $MEM = ProcessGetStats()[0]
MsgBox(0, 0, $MEM)

Local $a = FileRead('c:\windows\explorer.exe')
MsgBox(0, 1, ProcessGetStats()[0] - $MEM)

Local $b = $a
MsgBox(0, 2, ProcessGetStats()[0] - $MEM)

Local $b = FileRead('c:\windows\explorer.exe')
MsgBox(0, 3, ProcessGetStats()[0] - $MEM)


Exit


2 和 3 明显相差很多  而1和2相差很少
发表于 2013-5-13 14:29:15 | 显示全部楼层
回复 6# Qokelate


    ProcessGetStats 是获取该进程的内存占用状态,你这里的三个不同的值只能说明是该进程运行到当前的内存占用状态,和程序内的数组没有什么太大关系。
 楼主| 发表于 2013-5-13 14:50:10 | 显示全部楼层
回复 7# haijie1223

不好意思 我的測試法 的確是 目前內存占用量.....

先測 未載入 數組 時的 內存占用  在測試  載入 $A 的內存占用 看看增加多少 在測試 $B=$A 之後的內存占用量

不是實際 測試 光$A 占用的內存
发表于 2013-5-13 15:02:19 | 显示全部楼层
C++有直接获取地址的操作符&,还有sizeof判断大小。au3就不知道如何操作,不过我觉得ProcessGetStats是获取进程的瞬时占用,不是程序里面某个数组的,我个人认为,有待验证。
发表于 2013-5-13 15:38:48 | 显示全部楼层
回复 9# haijie1223


    当代码足够稳定的时候,EXE本身占用的内存就是一个相对定值,两者之差即可理解为变量本身占用的内存
发表于 2013-5-13 15:40:58 | 显示全部楼层
又或者理解为

不赋值任何变量,取得自身内存占用A  (即A那一瞬间的快照)

赋值变量后取得内存占用B, (B即为那一瞬间的快照)


两者快照之差即为变量占用的内存(变量占用的空间越大越明显)
 楼主| 发表于 2013-5-13 22:45:21 | 显示全部楼层
本帖最后由 kk_lee69 于 2013-5-13 22:47 编辑

回复 11# Qokelate

補充一下:

剛剛測試 6萬筆的 2D 數組

原本程式 運行 佔用記憶體 23328
$A 加上 6萬筆資料後  佔用記憶體 64772
把 $B=$A 之後    佔用記憶體 64780
設定 $A=0  之後  記憶體一樣佔用 64780
在設定 $B=0 之後   記憶體佔用   25450

看來似乎 $A 與 $B 會共用一個 位置的資料 而當 $A 或者 $B 其中一個消失的時候並不會影響 這個記憶體的佔用

必須要兩個同時消失  才會被釋放出來.....
发表于 2013-5-14 03:13:08 | 显示全部楼层
auto好像自身没有释放内存的机制
发表于 2013-5-14 11:30:46 | 显示全部楼层
回复 12# kk_lee69


    这正是我所说的内存优化机制,目前得到的结论是这样

  若赋值语句 $A=$B 则$A与$B共用一块内存  但若其中任何一个变化,后来改变的会重新申请内存


Local $a=123   ; $a 申请了一块内存

Local $b=$a    ; 因为$a和$b完全一样,所以共同一块内存

Local $a=123   ; $a被重新赋值,而且值是一个实体(非变量),所以$a会重新申请一块内存,而原来的内存继续提供给$b

Local $c=$b    ; 同理,$c和$b共同一块内存
发表于 2013-5-14 11:34:35 | 显示全部楼层
回复 13# netegg


    释放机制和优化机制是两码事


Local $a=123  ; 申请一块内存,假设是3个字节

$a=0          ; $a重新申请一块内存,可能是一个字节,同时由于原来的3个字节的内存占用无人认领,默认会被系统回收处理


准确来说,Au3的内存释放机制应该是依赖于系统的回收机制
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-17 19:50 , Processed in 0.074959 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表