




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、本文背景: 在編程中,很多Windows或C+的內(nèi)存函數(shù)不知道有什么區(qū)別,更別談?dòng)行褂?;根本?原因是,沒有清楚的理解操作系統(tǒng)的內(nèi)存管理機(jī)制,本文企圖通過簡(jiǎn)單的總結(jié)描述,結(jié)合實(shí) 例來闡明這個(gè)機(jī)制。本文目的:對(duì)Windows內(nèi)存管理機(jī)制了解清楚,有效的利用C+內(nèi)存函數(shù)管理和使用內(nèi)存。本文內(nèi)容:5.內(nèi)存管理機(jī)制-堆 (Heap)使用場(chǎng)合堆是進(jìn)程創(chuàng)建時(shí)在進(jìn)程空間建立的區(qū)域,由堆管理器來管理。一個(gè)進(jìn)程可以有很多個(gè)堆。進(jìn) 程有一個(gè)默認(rèn)堆為1M,可以動(dòng)態(tài)的擴(kuò)大。當(dāng)程序需要管理很多小對(duì)象時(shí),適合用堆;當(dāng)需要的空間大于1M時(shí),最好用虛擬內(nèi)存來管 理。堆的優(yōu)點(diǎn)是,有堆管理器來替它管理,不需管理具體的事情如頁面
2、邊界和分配粒度等問題,你可以從調(diào)用函數(shù)看的出來,比VirtualAlloc的參數(shù)少了不少。堆的缺點(diǎn)是分配和釋放的速度比前幾種機(jī)制要慢,所以最好不要超過1M;不像虛擬內(nèi)存那樣隨時(shí)提交和釋放,因?yàn)樗怯啥压芾砥鳑Q定的。如果 用堆分配 1G 的空間,需要 1 分種,而用虛擬內(nèi)存,則感覺不到任何延遲。默認(rèn)堆進(jìn)程默認(rèn)堆是供所有線程使用的,每當(dāng)線程需要從堆中分配釋放內(nèi)存區(qū)時(shí),系統(tǒng)會(huì)同步堆,所以訪問速度較慢。它的默認(rèn)大小是1M,同樣的,你可以通過以下鏈接命令改變其大?。?pragma comment(linker,/HEAP:102400000,1024000) 第一個(gè)值是堆的保留空間,第二個(gè)值是堆開始時(shí)提
3、交的物理內(nèi)存大小。本文將堆改變?yōu)?00M。當(dāng)你在程序中擴(kuò)大了堆提交的物理內(nèi)存時(shí),進(jìn)程運(yùn)行時(shí),物理內(nèi)存將減少擴(kuò)大的數(shù)量。但是 默認(rèn)堆總是可以擴(kuò)大的,不能限制它的最大值。當(dāng)你在程序中擴(kuò)大了堆保留的空間時(shí),進(jìn)程運(yùn)行時(shí),可用進(jìn)程空間將會(huì)減少擴(kuò)大的數(shù)量。每次你用New操作符分配內(nèi)存時(shí),進(jìn)程空間會(huì)相應(yīng)的減少,物理內(nèi)存也會(huì)相應(yīng)的減少。一個(gè)重要的提示,本文經(jīng)過測(cè)試,如果你需要的內(nèi)存塊大部分都超過512K,那么,建堆時(shí) 給它的初始大小不應(yīng)該很大,因?yàn)?,如果你所需?nèi)存塊大于512K的話,它不是從堆中分配 的,也就是說不用堆中默認(rèn)的空間,但其仍然屬于堆管理。默認(rèn)堆的一個(gè)用處是系統(tǒng)函數(shù)需要利用它運(yùn)行。比如, Wind
4、ows2000 的字符集是 UNICODE 的,如果調(diào)用ANSI版本的函數(shù),系統(tǒng)需要利用堆來從ANSI到UNICODE的轉(zhuǎn)換,調(diào)用UNICODE 版本的函數(shù)。自建堆U使用場(chǎng)合保護(hù)數(shù)據(jù)結(jié)構(gòu):將不同的數(shù)據(jù)結(jié)構(gòu)存在不同的堆中,可以防止不同的結(jié)構(gòu)之間由于指針誤操作而破壞了它們 消除內(nèi)存碎片:將大小不同的結(jié)構(gòu)保存在一個(gè)堆中,會(huì)導(dǎo)致碎片的產(chǎn)生,比如釋放一個(gè)小結(jié)構(gòu)時(shí),大結(jié)構(gòu)也 不能利用它。獨(dú)享堆的快速:如果用默認(rèn)堆的話,線程之間是同步訪問,速度慢;如果創(chuàng)建獨(dú)享堆,則系統(tǒng)可以不需同步, 比較快。第二個(gè)快速體現(xiàn)在釋放的快速,默認(rèn)堆中,你只能釋放某個(gè)內(nèi)存塊,而不能釋放整個(gè)堆;而 獨(dú)享堆可以一次釋放堆,也就是釋放了
5、所有的內(nèi)存塊。開始使用使用以下 APIHANDLE HeapCreate(DWORD 選項(xiàng),SIZE_T 初始大小,SIZE_T 最大值)“選項(xiàng)” 取值為 0 ,不是以下任意一個(gè)HEAP_NO_SERIALIZE,系統(tǒng)無需同步堆HEAP_GENERATE_EXCEPTIONS,當(dāng)創(chuàng)建失敗或分配失敗時(shí)產(chǎn)生異常?!俺跏即笮 笔嵌训拇笮?,系統(tǒng)會(huì)規(guī)整到頁面的整數(shù)倍,如04096 的任何數(shù)都為4096;但 是,進(jìn)程空間至少要 64K。“最大值”是堆允許的最大值;為0 則無限。使用HEAP_NO_SERIALIZE需確定只有單線程訪問這個(gè)堆,否則有可能破壞堆;或程序有同步 代碼來同步堆。C+程序如下:pH
6、eap=(char*)GetProcessHeap();printf (默認(rèn)堆地址=%xn,pHeap);MEMORYSTATUS memStatus2;GlobalMemoryStatus(&memStatus2);HANDLEhHeap=HeapCreate(HEAP_NO_SERIALIZE|HEAP_GENERATE_EXCEPTIONS,1024*1024*50,0);char* pHeap=(char*)hHeap;printf(新建堆 1 地址=%xn,pHeap);if(hHeap=NULL)cout創(chuàng)建堆失敗! endl;MEMORYSTATUS memStatus3;Glo
7、balMemoryStatus(&memStatus3);cout建立堆后:endl;cout減少物理內(nèi)存=memStatus2.dwAvailPhys-memStatus3.dwAvailPhysendl;cout減少可用頁文件=memStatus2.dwAvailPageFile-memStatus3.dwAvailPageFileendl;cout 減少可用進(jìn)程空間=memStatus2.dwAvailVirtual-memStatus3.dwAvailVirtualendlendl;HANDLEhHeap2=HeapCreate(HEAP_NO_SERIALIZE|HEAP_GENER
8、ATE_EXCEPTIONS,1024*1024*10,0);char* pHeap2=(char*)hHeap2;printf(新建堆 2 地址=%xn,pHeap2);結(jié)果如下:斷建堆丄地址=1北師師建立堆后;減少物理內(nèi)存-5277326 減少可用貴文件-52584448 箴少冗:用雀程空間=52432896:建堆2地址=4bc娜闕當(dāng)建立堆1時(shí),它分配了 50M的物理內(nèi)存給堆使用;當(dāng)建立堆2時(shí),堆2的地址是0 x04bc0000=0 x019c 0000+50*1024*1024.分配內(nèi)存:使用以下 APIPVOID HeapAlloc(HANDLE 堆句柄, DWORD 選項(xiàng), SIZE
9、_T 字節(jié)數(shù))HEAP_ZERO_MEMORY,所有字節(jié)初始化為0HEAP_NO_SERIALIZE,堆這個(gè)內(nèi)存區(qū)獨(dú)享HEAP_GENERATE_EXCEPTIONS產(chǎn)生異常。如果創(chuàng)建堆有了它就不用再設(shè)了。異??赡転椋?STATUS_NO_MEMOR (無足夠內(nèi)存)和 STATUS_ACCESS_VIOLATION (堆被破壞,分配失敗)。C+程序如下:GlobalMemoryStatus(&memStatus3);PVOID pV=HeapAlloc(hHeap,HEAP_ZERO_MEMORY|HEAP_NO_SERIALIZE|HEAP_GENERATE_EXCEPTIONS,1024*
10、507);if(pV=NULL)cout分配堆內(nèi)存失敗!endl;char * pC=(char*)pV;printf(第一次分配地址=%xn,pC);MEMORYSTATUS memStatus4;GlobalMemoryStatus(&memStatus4);cout第一次堆分配后:endl;cout減少物理內(nèi)存=memStatus3.dwAvailPhys-memStatus4.dwAvailPhysendl;cout 減少可用進(jìn)程空間=memStatus3.dwAvailVirtual-memStatus4.dwAvailVirtualendlendl;PVOID pV2=HeapAl
11、loc(hHeap, HEAP_ZERO_MEMORY|HEAP_NO_SERIALIZE|HEAP_GENERATE_EXCEPTIONS,1024*508);if(pV2=NULL)cout分配堆內(nèi)存失敗!endl;char * pC2=(char*)pV2;printf(第二次分配地址=%xn,pC2);MEMORYSTATUS memStatus5;GlobalMemoryStatus(&memStatus5);cout第二次堆分配后:endl;cout減少物理內(nèi)存=memStatus4.dwAvailPhys-memStatus5.dwAvailPhysendl;cout減少可用頁文
12、件=memStatus4.dwAvailPageFile-memStatus5.dwAvailPageFileendl;cout 減少可用進(jìn)程空間=memStatus4.dwAvailVirtual-memStatus5.dwAvailVirtualendlendl;for(int i=0;i200*1024;i+)pC2i=9;MEMORYSTATUS memStatus10;cout第二次堆使用一半后:endl;cout減少物理內(nèi)存二memStatus5 .dwAvailPhys-memStatuslO dwAvailPhyse ndl; cout 減少可用頁文件=memStatus5.d
13、wAvailPageFile-memStatus1O.dwAvailPageFileendl;cout減少可用進(jìn)程空間=memStatus5.dwAvailVirtual-memStatus1O.dwAvailVirtualendlendl;結(jié)果如下:/=0 M /=0 M -龍間 址后件宇 地配存文稈 配分貿(mào)進(jìn)用用 次次物可可 二少少少453S2=5間 址后件辛 地配存文稈 配分貿(mào)進(jìn) 83用用 次次物可可 -V 一少少少一半后:二次堆使 少物理包 少可用員文件屯 步可用進(jìn)程空間赳一半后:可以看出,第一次分配507K的地址為0 x04ad d650OxO4bc OOOO ,它是在堆外分配的;無
14、論在多大的堆中, 只要分配內(nèi)存塊大于507K時(shí),都會(huì)在堆外分配,但是,它像在堆中一樣,存在堆的鏈接表 中,受堆管理。分配時(shí),系統(tǒng)使用的是虛擬頁文件;只有在真正使用時(shí),才會(huì)分配物理內(nèi)存。至于為什么分配大于 507K 會(huì)在堆外分配而不直接使用堆中的內(nèi)存,目前仍然不清楚。改變大?。篜VOID HeapReAlloc(HANDLE 堆句柄, DWORD 選項(xiàng), PVOID 舊內(nèi)存塊地址, SIZE_T 新內(nèi)存 塊大?。斑x項(xiàng)”除了以上三個(gè)外,還有HEAP_REALLOC_IN_PLACE_ONLY,指定不能移動(dòng)原有內(nèi)存塊 的地址。C+程序如下:PVOID pV2New=HeapReAlloc(hHea
15、p,0,pV2,1024*1024*2);if(pV2New!=NULL)char * pC2New=(char*)pV2New;printf(改變分配地址=%xn,pC2New);coutpC2New0endl;coutpC20endl;出現(xiàn)訪問違規(guī)SIZE_T lenNew=HeapSize(hHeap,0,pV2New);cout改變后大小=lenNewendl;GlobalMemoryStatus(&memStatus5);cout改變分配后:endl;cout減少物理內(nèi)存=memStatus4.dwAvailPhys-memStatus5.dwAvailPhysendl;cout減少
16、可用頁文件=memStatus4.dwAvailPageFile-memStatus5.dwAvailPageFileendl;cout減少可用進(jìn)程空間=memStatus4.dwAvailVirtual-memStatus5.dwAvailVirtualendlendl;結(jié)果如下:改變分配地址=5 6 42 R0 0 _b6 98S764 15 525858=! 7123=1間 戲 件幸 昶存文稈 小后ES貞進(jìn) 大配理用用 后分物可可 變$少少少- 改改減減減可以看出,新內(nèi)存塊緊接著原來內(nèi)存塊結(jié)束的地方開始創(chuàng)建,大小為2M;原來的內(nèi)存塊的內(nèi) 容被銷毀和釋放,所以新內(nèi)存塊只減少了增加的內(nèi)存量。
17、一個(gè)缺點(diǎn)就是,新內(nèi)存塊居然不保 留原來內(nèi)存的內(nèi)容!另外,如果采用HEAP_REALLOC_IN_PLACE_ONLY的話,出現(xiàn)Not EnoughQuote 異常。也就是說,當(dāng)前內(nèi)存的狀況是,必須移動(dòng)才可以擴(kuò)大此內(nèi)存塊。查詢內(nèi)存:可以查詢堆中一個(gè)內(nèi)存塊的大小。SIZE_T HeapSize(HANDLE 堆句柄,DWORD 選項(xiàng),LPVOID 內(nèi)存塊地址) “選項(xiàng)”可為0 或 HEAP_NO_SERIALIZE。參考以上例子。釋放內(nèi)存塊:BOOL HeapFree(HANDLE 堆句柄, DWORD 選項(xiàng), PVOID 內(nèi)存塊地址) “選項(xiàng)”可為0 或 HEAP_NO_SERIALIZE。C+
18、程序如下:GlobalMemoryStatus(&memStatus5);HeapFree(hHeap,0,pV2New);MEMORYSTATUS memStatus6;GlobalMemoryStatus(&memStatus6);cout第二次堆分配釋放后:endl;cout增加物理內(nèi)存=memStatus6.dwAvailPhys-memStatus5.dwAvailPhysendl;cout增加可用頁文件=memStatus6.dwAvailPageFile-memStatus5.dwAvailPageFileendl;cout增加可用進(jìn)程空間=memStatus6.dwAvailV
19、irtual-memStatus5.dwAvailVirtualendlendl;結(jié)果如下:第二次堆分配釋放右 瓚加物理因存=524288 瑁加嚴(yán)用頁文件-2109440 謂加可匡進(jìn)程空1=2101248內(nèi)存空間釋放了原來的2M空間。BOOL HeapDestroy(HANDLE 堆句柄) 不能用它釋放默認(rèn)堆,系統(tǒng)忽略它的處理。這一次,我們先在堆1中分配了 70M的內(nèi)存,由于它很大,所以,堆在堆外給它分配了內(nèi)存,所以,堆1 一共有50M+70M=120M。釋放程序如下:PVOIDpV4=HeapAlloc(hHeap,HEAP_ZERO_MEMORY|HEAP_NO_SERIALIZE|HEA
20、P_GENERATE_EXCEPTIONS),1024*1024*70);if(pV4=NULL)cout分配堆內(nèi)存失敗!endl;char * pC4=(char*)pV4;printf(第四次堆分配=%xn,pC4);MEMORYSTATUS memStatus9;GlobalMemoryStatus(&memStatus9);cout分配堆內(nèi)存后:endl;cout減少物理內(nèi)存=memStatus7.dwAvailPhys-memStatus9.dwAvailPhysendl;cout減少可用頁文件=memStatus7.dwAvailPageFile-memStatus9.dwAvai
21、lPageFileendl;cout 減少可用進(jìn)程空間=memStatus7.dwAvailVirtual-memStatus9.dwAvailVirtualendlendl;SIZE_T len=HeapSize(hHeap,0,pV4);coutlen=lenendl;bool re=HeapDestroy(hHeap);if(re=false)cout釋放堆失敗!endl;MEMORYSTATUS memStatus8;GlobalMemoryStatus(&memStatus8);cout釋放堆后:endl;cout增加物理內(nèi)存=memStatus8.dwAvailPhys-memSt
22、atus9.dwAvailPhysendl;cout增加可用頁文件=memStatus8.dwAvailPageFile-memStatus9.dwAvailPageFileendl;cout增加可用進(jìn)程空間=memStatus8.dwAvailVirtual-memStatus9.dwAvailVirtualendlendl;結(jié)果如下:汐輻54733 =7冋 :=2|汐輻54733 =7冋 :=2|件封 配后存文稈 分存進(jìn) 輕內(nèi)理用用 次堆物可可 四配少少少 毎減減減03月進(jìn) 的后理用用 73堆物可可 一一 _u _u -U n .庁力-力力 上V豐隔曰甜曰甜戸1 -u- n- LLrplr
23、iri0 8709 86 24 12 -=5件空存文稈如所猜想一樣,釋放了 120M內(nèi)存。獲取所有堆:DWORD GetProcessHeaps(DWORD 數(shù)量, PHANDLE 句柄數(shù)組)“句柄數(shù)組”是獲得的堆句柄。默認(rèn)堆也可以獲取。HANDLE handles10; memset(handles,0,sizeof(handles);GetProcessHeaps(10,handles);for(int i=0;i10;i+)cout堆i+1=handlesiendl;結(jié)果如下:堆1=00153300 堆 堆丁工越眨2&WJ3S5妨j5=332?a88S ffi&=0(33A00(30 堆
24、 7=f)i?C0a0a 堆& =阿毘HGESSSiSi 堆丫=科悔拜專秀程毎筋 堆:L=碗宿衿阿0毎悔帝 ;_1I taj_可以看見,一共有8 個(gè)堆,堆 1 是默認(rèn)堆,堆 7 和堆 8 是本文建立的堆。另外 5 個(gè)不知來源。驗(yàn)證堆:BOOL HeapValidate(HANDLE 堆句柄,DWORD 選項(xiàng),LPVOID 內(nèi)存塊地址)“選項(xiàng)” 可為 0 或 HEAP_NO_SERIALIZE;“內(nèi)存塊地址”為NULL時(shí),驗(yàn)證所有內(nèi)存塊。C+程序如下:HANDLEhandles10;memset(handles,0,sizeof(handles);GetProcessHeaps(10,handl
25、es);for(int i=0;i10;i+)cout堆i+1=handlesi;if(HeapValidate(handlesi,0,NULL)cout驗(yàn)證堆成功!endl;elsecoutendl;結(jié)果如下:切功功功功功功功Qfe fe ftftfefefefe 證證證證證證證證 應(yīng)監(jiān).虛監(jiān),也險(xiǎn)應(yīng)臉 切功功功功功功功Qfe fe ftftfefefefe 證證證證證證證證 應(yīng)監(jiān).虛監(jiān),也險(xiǎn)應(yīng)臉 耳耳 ud- ud- ud- r=JT4=000260 堆石=003960 堆右7=&19C&Q 堆8 =0細(xì)C陰陥 堆9 =00000030 醪14 師闕殖豳合并內(nèi)存塊:UINT HeapCom
26、pact(HANDLE 堆句柄,DWORD 選項(xiàng))“選項(xiàng)” 可為 0 或 HEAP_NO_SERIALIZE; 此函數(shù)可以合并空閑內(nèi)存塊。其他函數(shù):HeapLock 和 HeapUnlock 通常是系統(tǒng)使用的;HeapWalk 可以遍歷堆內(nèi)存,需要以上兩個(gè)函數(shù)。Malloc 和 Free這是C語言使用的函數(shù),只能從默認(rèn)堆中分配內(nèi)存,并且只是分配內(nèi)存,不能調(diào)用構(gòu)造函數(shù), 且只是按字節(jié)分配,不能按類型分配。New 和 Delete這是C+語言使用的函數(shù),默認(rèn)情況下從默認(rèn)堆中分配內(nèi)存,但是也可以通過重載New函 數(shù),從自建堆中按類型分配;同時(shí)可以執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù)。它底層是通過HeapAlloc
27、 和 HeapFree 實(shí)現(xiàn)的。 依賴于編譯器的實(shí)現(xiàn)。GlobalAlloc 和 GlobalFree這是比HeapAlloc和HeapFree更慢的函數(shù),但是也沒有比它們更好的優(yōu)點(diǎn),只能在默認(rèn)堆中 分配; 16位操作系統(tǒng)下利用它們分配內(nèi)存。LocalAlloc 和 LocalFree在 WindowsNT 內(nèi)核里,和 GlobalAlloc、GlobalFree 是一樣的。一個(gè)例子默認(rèn)情況下,New關(guān)鍵字是利用HeapAlloc在默認(rèn)堆上建立對(duì)象。本文重載了類的New方 法,使得類在自己的堆中存放,這樣可以與外面的對(duì)象隔離,以免重要的數(shù)據(jù)結(jié)構(gòu)被意外破 壞。由于類中的成員變量是在堆中存放,因此
28、不局限于線程堆棧的1M空間。C+程序如下:class AllocateInOtherHeappublic:AllocateInOtherHeap(void);AllocateInOtherHeap(void);void* operator new(size_t size);static HANDLE heap;public:/類對(duì)象唯一所需的空間int iArray1024*1024*10;AllocateInOtherHeap:AllocateInOtherHeap(void)coutAllocateInOtherHeap()endl;/如果 New 函數(shù)沒有分配夠空間,那么此處會(huì)出現(xiàn)訪問違規(guī)memset(iArray,0,sizeof(AllocateInOtherHeap);iArray1024=8;void* AllocateInOtherHeap:operator new(size_t size)if(heap=NULL)heap=Heap
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 游泳救生員初級(jí)測(cè)試題與答案
- 推拿治療學(xué)測(cè)試題+答案
- 業(yè)務(wù)學(xué)習(xí)心得體會(huì)范文
- 醫(yī)美服裝采購(gòu)合同范本
- 下半年人力資源部工作計(jì)劃
- 三年級(jí)數(shù)學(xué)綜合實(shí)踐課教案
- 中藥炮制工中級(jí)練習(xí)題(含答案)
- 辦公別墅 出租合同范本
- 建筑信息模型職業(yè)技能理論知識(shí)試題庫及參考答案
- 工程地質(zhì)與土力學(xué)練習(xí)題(含答案)
- 湖北省武漢市江漢區(qū)2023-2024學(xué)年七年級(jí)下學(xué)期期末數(shù)學(xué)試題
- (完整版)初級(jí)茶藝師理論知識(shí)300題含答案【完整版】
- 四肢創(chuàng)傷影像(X線)診斷
- DL-T5153-2014火力發(fā)電廠廠用電設(shè)計(jì)技術(shù)規(guī)程
- (高清版)JTGT 3365-02-2020 公路涵洞設(shè)計(jì)規(guī)范
- DZ∕T 0223-2011 礦山地質(zhì)環(huán)境保護(hù)與恢復(fù)治理方案編制規(guī)范(正式版)
- 2024年湖南有色金屬職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫學(xué)生專用
- 醫(yī)院營(yíng)養(yǎng)食堂餐飲服務(wù)投標(biāo)方案(技術(shù)方案)
- 醫(yī)院培訓(xùn)課件:《分級(jí)護(hù)理制度解讀》
- 學(xué)生宿舍安全應(yīng)急疏散預(yù)案
- 北師大版數(shù)學(xué)四年級(jí)下冊(cè)第2單元 認(rèn)識(shí)三角形和四邊形 大單元整體教學(xué)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論