動(dòng)態(tài)內(nèi)存概述
掃描二維碼
隨時(shí)隨地手機(jī)看文章
動(dòng)態(tài)內(nèi)存(Dynamic Memory),使用戶能夠指定虛擬操作系統(tǒng)啟動(dòng)的RAM容量,并將平臺(tái)可用的系統(tǒng)內(nèi)存最大化。
Integrity VM 的可選功能,通過(guò)該功能,您可以更改虛擬機(jī)使用的物理內(nèi)存量,而無(wú)須重新引導(dǎo)該虛擬機(jī)。在 Integrity VM 的本發(fā)行版中,只能在 HP-UX guest 虛擬機(jī)上使用動(dòng)態(tài)內(nèi)存。例如,該功能允許將作為 Servicegard 節(jié)點(diǎn)的 guest 虛擬機(jī)用作多個(gè) Serviceguard 程序包的備用服務(wù)器。當(dāng)程序包故障切換到 guest 虛擬機(jī)時(shí),可在故障切換之前、之后或期間更改 guest 虛擬機(jī)的內(nèi)存,使其符合程序包的要求。要使用動(dòng)態(tài)內(nèi)存,guest 虛擬機(jī)必須安裝 guest 虛擬機(jī)管理軟件。
在 VM Host 中,動(dòng)態(tài)內(nèi)存軟件隨 Integrity VM 一起提供??墒褂?hpvmcreate、hpvmmodify 或 hpvmclone 命令的 -x 選項(xiàng)在 VM Host 上管理動(dòng)態(tài)內(nèi)存。-x 選項(xiàng)可將各種配置參數(shù)與 guest 虛擬機(jī)(包括 guest 虛擬機(jī)的動(dòng)態(tài)內(nèi)存和網(wǎng)絡(luò)管理)相關(guān)聯(lián)。
動(dòng)態(tài)內(nèi)存限制使用動(dòng)態(tài)內(nèi)存具有下列限制:虛擬機(jī)大小不能增加到其初始引導(dǎo)大小(如 -r 選項(xiàng)所指定)以上。如果虛擬機(jī)內(nèi)存已產(chǎn)生碎片,則嘗試減少虛擬機(jī)大小可能會(huì)失敗或需要很長(zhǎng)時(shí)間。如果無(wú)法將虛擬機(jī)大小降低到所需大小,請(qǐng)通過(guò)設(shè)置新的目標(biāo)大小來(lái)異常中止操作。增加虛擬機(jī)大小需要 VM Host 上具有一定的可用內(nèi)存。如果 VM Host 內(nèi)存不足,該操作可能需要很長(zhǎng)時(shí)間才能完成,并可能失敗。如果 ram_target 和 ram_dyn_target_start 的值不在 ram_dyn_min 和 ram_dyn_max 值之間,則會(huì)發(fā)出一條警告。VM Host 資源注意事項(xiàng)HP-UX 支持“大型頁(yè)面”內(nèi)存管理功能,可用于提高性能。Integrity VM 可通過(guò)確保在虛擬機(jī)啟動(dòng)時(shí)分配容量最大的可用頁(yè)面來(lái)實(shí)現(xiàn)此功能。一旦分配并鎖定這些頁(yè)面之后,將無(wú)法更改其大小。此限制可使大型頁(yè)面的碎片降至最低。該功能會(huì)限制可在 VM Host 系統(tǒng)上運(yùn)行的軟件類型。如果 VM Host 系統(tǒng)支持虛擬機(jī)以外的其他工作負(fù)荷,則大型頁(yè)面可能會(huì)產(chǎn)生碎片,并可能導(dǎo)致新啟動(dòng)的虛擬機(jī)性能降低。動(dòng)態(tài)內(nèi)存增加了 VM Host 內(nèi)存產(chǎn)生碎片的可能性。動(dòng)態(tài)內(nèi)存的當(dāng)前實(shí)現(xiàn)方式可釋放向虛擬機(jī)分配的內(nèi)存部分。必須以大型連續(xù)塊為單位執(zhí)行這些操作;否則,減少虛擬機(jī)大小會(huì)使為該虛擬機(jī)分配的 VM Host 內(nèi)存產(chǎn)生碎片??赏ㄟ^(guò)軟件防止產(chǎn)生此潛在碎片,即以物理連續(xù)內(nèi)存的最小塊大小 64 MB 的倍數(shù)為單位減少虛擬機(jī)大小。Guest 虛擬機(jī)資源注意事項(xiàng)運(yùn)行某一工作負(fù)荷的系統(tǒng)正常運(yùn)行期間,大型頁(yè)面可能會(huì)逐漸產(chǎn)生碎片。VM Host 和運(yùn)行 HP-UX 操作系統(tǒng)的虛擬機(jī)都會(huì)出現(xiàn)這種情況。如果虛擬機(jī)內(nèi)存產(chǎn)生碎片,動(dòng)態(tài)內(nèi)存子系統(tǒng)將無(wú)法減少 guest 虛擬機(jī)的大小。這是因?yàn)榇藴p少大小的操作使用最小塊大小。如果動(dòng)態(tài)內(nèi)存無(wú)法刪除至少 64 MB 的物理連續(xù) guest 虛擬機(jī)內(nèi)存,則不會(huì)減少大小。指定足夠的 Guest 虛擬機(jī)內(nèi)存如果將 ram_dyn_target_start 的值設(shè)置得過(guò)小,則 guest 虛擬機(jī)操作系統(tǒng)可能會(huì)在引導(dǎo)時(shí)掛起或崩潰。此種情況下,guest 虛擬機(jī)無(wú)法訪問(wèn)足夠的內(nèi)存量。通常,降低分配給 HP-UX guest 虛擬機(jī)的內(nèi)存時(shí)降幅不能超過(guò)其分配的內(nèi)存大小的 75%。對(duì)于配置了 2 GB 內(nèi)存的虛擬機(jī),其內(nèi)存降低幅度不能超過(guò) 50%。
ii.對(duì)于函數(shù)calloc用法大致與malloc相同,函數(shù)原型為:void *callo(size_t num,size_t size),作用是在內(nèi)存中分配連續(xù)大小為num*size的空間,這一點(diǎn)在動(dòng)態(tài)數(shù)組內(nèi)存分配有所體現(xiàn),返回值以及判斷返回是否成功與上面相同,下面重點(diǎn)來(lái)討論malloc與calloc區(qū)別:1、后者在返回指向內(nèi)存的指針之前把它初始化為0。2、請(qǐng)求內(nèi)存數(shù)量的方式不同。malloc的參數(shù)僅僅是需要分配的內(nèi)存字節(jié)數(shù);calloc的參數(shù)包括元素的數(shù)量和每個(gè)元素的字節(jié)數(shù)。iii.對(duì)于realloc(),函數(shù)原型是*void realloc(void *ptr,size_t size),改變ptr所指內(nèi)存區(qū)域的大小為size長(zhǎng)度,如果重新分配成功則返回指向被分配內(nèi)存的指針,否則返回空指針NULL。當(dāng)內(nèi)存不再使用時(shí),應(yīng)使用free()函數(shù)將內(nèi)存塊釋放。有一點(diǎn)需要注意:當(dāng)內(nèi)存釋放之后,應(yīng)將原本的指針ptr=NULL,否則會(huì)形成野指針,可能造成系統(tǒng)崩潰。提示:不論是以上那種方式申請(qǐng)內(nèi)存,在申請(qǐng)內(nèi)存之后,最終都要用free釋放空間,不然會(huì)造成內(nèi)存泄漏。