推 VictorTom:怪怪的, new與delete應該作用於你process的virtual 04/21 09:28
→ VictorTom:memory space; 至於會不會持續佔用physical memory, 這 04/21 09:29
→ VictorTom:是OS的memory management的行為....@_@" 04/21 09:30
→ VictorTom:剛才發現原文的a大其實已經提過這一點了....Orz 04/21 09:31
→ VictorTom:原文 推文的 a大, 補字....囧rz 04/21 09:31
但是標準函式庫在實作時, 並不是在你 new 時就會使用 system call 來只向作業系統
申請所需要的 memory. 而是一次申請一大塊, 自己有其管理機制. 因此 delete 時也不
見得會馬上使用 brk 等 system call 來調整其 virtual address space.
所以我認為跟 Kernel 及所採用的 C Run-Time Liabrary 都有關係
※ 編輯: operationcow 來自: 140.112.243.43 (04/21 10:03)
推 james732:不過標準函式庫確實有可能也參一腳...實作有規定嗎? 04/21 09:50
不太懂你的意思, 實作應該是沒有規定應該要怎麼做. 至少在我看的 c spec 是沒有
(也許是我看得不夠仔細), 但我想一般是不會頻繁的使用 system call 來調整 memory
的使用.
※ 編輯: operationcow 來自: 140.112.243.43 (04/21 10:11)
→ tinlans:要是要了 8k, 4k, 16k,然後 delete 了中間的 4k,當然不 04/21 11:18
→ tinlans:可能馬上就跟你縮回去。 04/21 11:18
請問 t 大, 如果是以 4k 為單位(如你舉的例子), 剛好是作業系統常見的一個 page 的
長度, 在 CRT 實作中, 是否可以有以下方式以釋放 virtual address space??
(欲在程式裡面把 heap 後面 16k 的資料直接往前移動 4k, CRT 所作步驟 a.
更改 CRT 管理 heap 的資料結構, b. 將後面 16k 的資料往前 copy 移動 4k, 其中 b
其實只要 作業系統最佳化時察覺到/CRT向系統申請 直接更改 MMU 的對應即可)
感謝感謝
※ 編輯: operationcow 來自: 140.112.243.43 (04/21 11:40)
→ GGing:我之前使用vector的clear也有不會釋放的問題@@ 04/21 11:27
→ tinlans:vector 本來 clear 就不會釋放... 04/21 11:36
→ tinlans:至少有兩本書教過大家用 swap 的方法釋放 vector 的空間 04/21 11:37
→ VictorTom:現在有點搞不清楚你要釋放Vir Addr Sp還是Phy Mem了說?? 04/21 11:59
→ VictorTom:但是, 如果你要做你說的去pack, 一個是memcopy的額外負 04/21 11:59
→ VictorTom:擔會很重, 另一個是你需要再implement一個remap table, 04/21 12:00
→ VictorTom:才能重新map AP端的Vir Addr到你搬移好的Vir Addr去吧?? 04/21 12:00
→ VictorTom:感覺這麼做, overhead太大, gain不到實質好處說@_@" 04/21 12:01
→ tinlans:C 的 pointer 存放的就是 virtual address,你移動的話這 04/21 12:31
→ tinlans:些 pointer 的值也要跟著改,這幾乎不太可能追蹤出來。 04/21 12:32
→ tinlans:要是有 pointer 指到那個 16k 起始點,要怎麼 update 它? 04/21 12:33
沒錯, 你說的對, 在這個 model 底下的確無法完成 update 所有指標這個 issue,
受教了 <(__)>
推 VictorTom:對不起, t大說的是對的, 只知道起點根本沒有用, 變數存 04/21 12:36
→ VictorTom:的是位址還是值根本無法判定, 所以根本不可能追蹤Orz 04/21 12:36
※ 編輯: operationcow 來自: 140.112.243.43 (04/21 14:33)