freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

windows編程基本手冊(參考版)

2025-07-02 09:03本頁面
  

【正文】 不要在多線程代碼中使用非 const 的靜態(tài)變量.不幸的是, 靜態(tài)變量的構(gòu)造函數(shù), 析構(gòu)函數(shù)以及初始化操作的調(diào)用順序在 C++ 標(biāo)準(zhǔn)中未明確定義, 甚至每次編譯構(gòu)建都有可能會發(fā)生變化, 從而導(dǎo)致難以發(fā)現(xiàn)的 bug. 比如, 結(jié)束程序時, 某個靜態(tài)變量已經(jīng)被析構(gòu)了, 但代碼還在跑 – 其它線程很可能 – 試圖訪問該變量, 直接導(dǎo)致崩潰.所以, 我們只允許 POD 類型的靜態(tài)變量. 本條規(guī)則完全禁止 vector (使用 C 數(shù)組替代), string (使用 const char*), 及其它以任意方式包含或指向類實例的東東, 成為靜態(tài)變量. 出于同樣的理由, 我們不允許用函數(shù)返回值來初始化靜態(tài)變量.如果你確實需要一個 class` 類型的靜態(tài)或全局變量, 可以考慮在 ``main() 函數(shù)或 pthread_once() 內(nèi)初始化一個你永遠(yuǎn)不會回收的指針.。}如果EXE和DLL這兩者或兩者之鏈接到靜態(tài)版本的C/C++運行時庫,++運行時庫,則上述代碼將正常工作.1微軟特意創(chuàng)建FreeLibraryAndExitThread函數(shù)的原因如下:編寫一個DLL,當(dāng)它初次映射到進程的地址空間,創(chuàng)建一個線程,當(dāng)該線程執(zhí)行完畢,它通過調(diào)用FreeLibrary,將DLL從進程的地址空間中解除映射,但是線程分別調(diào)用FreeLibrary和ExitThread將會產(chǎn)生嚴(yán)重的問題,調(diào)用FreeLibrary將會立即使DLL從進程的地址空間解除映射,當(dāng)調(diào)用FreeLibrary返回時,包含對ExitThread調(diào)用的代碼將不再可用,并且線程將不再執(zhí)行,這將導(dǎo)致一個訪問違例,以致整個進程終止運行.1Dll入口函數(shù)是大小寫敏感的.2Dll可以使用延遲加載,在進程執(zhí)行過程中,分開加載DLL,: /DelayLoad: 在默認(rèn)情況下,所調(diào)用的函數(shù)可綁定到內(nèi)存地址,即系統(tǒng)認(rèn)為該函數(shù)會在一個進程的地址處,由于創(chuàng)建可綁定的延時加載DLL會使可執(zhí)行文件變大,因此鏈接程序同時也支持一個/Delay:nobind開關(guān)3少數(shù)函數(shù)允許一個進程對另一個進程進行操作,大多數(shù)這類函數(shù)最初是為了調(diào)試程序和其他工具設(shè)計的,當(dāng)然,任何應(yīng)用程序都可以調(diào)用這些函數(shù),Windows提供了一個稱為CreateRemoteThread函數(shù),使得可以簡單地在另一個進程創(chuàng)建線程,4注入DLL的另一個方法是替換所知道的進程將要加載的DLL,但是它不具有版本彈性.5調(diào)試程序可以強制將某些代碼放進被調(diào)試進程的地址空間(例如使用WriteProcessMemory函數(shù)),并且使被調(diào)試進程的主線程執(zhí)行該代碼,需要操作被調(diào)試線程的CONTEXT結(jié)構(gòu),編寫針對特定CPU的代碼,手工編寫想讓被調(diào)試進程執(zhí)行的機器語言指令,調(diào)試程序與其被調(diào)試進程之間存在著固定的關(guān)聯(lián)關(guān)系,如果調(diào)試程序終止運行,則Windows將自動地銷毀被調(diào)試進程,你無法阻止該操作.6如果你的進程正在派生你想要注入代碼的進程,可以設(shè)置線程的指令指針以執(zhí)行內(nèi)存映射文件的代碼,1) 讓你的進程生成被掛起的子進程2) 3) 將機器指令保存到此內(nèi)存地址4) 在該地址強制加入一些手工編寫的機器指令,這些指令應(yīng)當(dāng)調(diào)用LoadLibrary函數(shù)來加載一個DLL5) 恢復(fù)子進程的主線程的運行,以使該代碼可以執(zhí)行6) 將初始指令重新保存到起始地址7) 像任何事情沒有發(fā)生一樣,使進程從起始地址繼續(xù)執(zhí)行.只有當(dāng)函數(shù)只有 10 行甚至更少時才將其定義為內(nèi)聯(lián)函數(shù). 當(dāng)函數(shù)體比較小的時候, 內(nèi)聯(lián)該函數(shù)可以令目標(biāo)代碼更加高效. 對于存取函數(shù)以及其它函數(shù)體比較短, 性能關(guān)鍵的函數(shù), 鼓勵使用內(nèi)聯(lián).缺點:濫用內(nèi)聯(lián)將導(dǎo)致程序變慢. 內(nèi)聯(lián)可能使目標(biāo)代碼量或增或減, 這取決于內(nèi)聯(lián)函數(shù)的大小. 內(nèi)聯(lián)非常短小的存取函數(shù)通常會減少代碼大小, 但內(nèi)聯(lián)一個相當(dāng)大的函數(shù)將戲劇性的增加代碼大小. 現(xiàn)代處理器由于更好的利用了指令緩存, 小巧的代碼往往執(zhí)行更快。 Free(pv)。If(hMap==NULL) return GetLastError()。由于禁止訪問內(nèi)存的這個分區(qū),因此會發(fā)生非法訪問現(xiàn)象,并終止這個進程的運行. 64KB禁止進入分區(qū)這個分區(qū)禁止進入,將內(nèi)存塊的地址和長度傳遞給Windows函數(shù)時,在Windows函數(shù)執(zhí)行操作前,內(nèi)存塊即可生效,系統(tǒng)將內(nèi)存頁面復(fù)制到頁面文件,系統(tǒng)的運行也越慢(抖動(thrashing)意味著操作系統(tǒng)將更多的時間花費在將頁面在內(nèi)存中調(diào)入調(diào)出,而不是把大部分時間用于程序的運行),因此,通過增加計算機的內(nèi)存,就可以減少運行應(yīng)用程序時發(fā)生的次數(shù),這樣必然可以大大提高系統(tǒng)的運行速度,在大多數(shù)情況下,增加內(nèi)存比提高處理器的運行速度更能夠提高系統(tǒng)的運行性能.1CPU處理準(zhǔn)確對齊的數(shù)據(jù)時,它的運行效率最高,在用數(shù)據(jù)的大小對內(nèi)存地址取模,結(jié)果為0時,數(shù)據(jù)是對齊的,例如,WORD類型的值應(yīng)該總是從能夠被2除盡的地址開始,而DWORD類型的值則應(yīng)該總是從能夠被4除盡的地址開始,當(dāng)CPU試圖讀取未對齊的數(shù)據(jù)時,CPU可能產(chǎn)生下面的兩種情況之一:它可以產(chǎn)生一個異常條件,也可以執(zhí)行多次對齊的內(nèi)存訪問,應(yīng)用程序的運行速度就會降低,在最好的情況下,系統(tǒng)訪問未對齊的數(shù)據(jù)所需的時間也是訪問對齊數(shù)據(jù)所需時間的兩倍,為了使應(yīng)用程序獲得最佳的性能,編寫代碼時必須將數(shù)據(jù)準(zhǔn)確對齊.2Windows內(nèi)存管理的方法(1) 虛擬內(nèi)存,適合管理大型對象或結(jié)構(gòu)數(shù)組(2) 內(nèi)存映射文件,適合管理大數(shù)據(jù)流以及管理在單個計算機上運行的多個進程之間的數(shù)據(jù)共享(3) 內(nèi)存堆,適合管理大量的小對象3目前為止,所有Windows的分配粒度都為64KB,因此,如果需要在進程的地址空間中保留從19668992(300*65536+8192)地址開始的區(qū)域,系統(tǒng)將會自動將這個地址調(diào)整為64KB的倍數(shù),然后保留地址從 19660800(300*65536)開始的區(qū)域.4物理RAM是一種非常寶貴的資源,應(yīng)用程序只能分配尚未指明用途的RAM,不應(yīng)該過多使用AWE,否則進程和其他進程就會過份地在內(nèi)存與磁盤之間進行頁面調(diào)度,從而嚴(yán)重影響系統(tǒng)運行性能,如果可用的RAM數(shù)量較少,那也會對系統(tǒng)創(chuàng)建進程,線程和其他資源產(chǎn)生負(fù)面影響,應(yīng)用程序可以使用GlobalMemoryStatusEx函數(shù),來監(jiān)控物理存儲器的使用情況.5盡管我們需要創(chuàng)建的棧大小只有1MB,棧區(qū)域的實際大小卻是1MB加128KB,在Windows 98,每次為一個棧保留區(qū)域時,系統(tǒng)實際上所保留的區(qū)域都比所要求的區(qū)域尺寸大128KB,棧的前面有一個64KB的塊,捕獲棧的上溢條件,棧的后面是另外一個64KB的塊. 內(nèi)存映射文件內(nèi)存映射文件的目的1. 系統(tǒng)使用內(nèi)存映射來加載exe和DLL文件,可以大大節(jié)省頁面文件空間以及應(yīng)用程序啟動運行所需的時間2. 使用內(nèi)存映射來訪問磁盤的數(shù)據(jù)文件,這樣不必對文件執(zhí)行I/O操作,并且不必對文件內(nèi)存進行緩存.3. 使用內(nèi)存映射可以在同一臺計算機運行多個線程之間共享數(shù)據(jù),Windows其它的共享方式都是基于使用內(nèi)存映射來實現(xiàn)的.1使用內(nèi)存映射可以對大文件,進行內(nèi)容的倒序,用戶打開這個文件,并告訴系統(tǒng)將虛擬地址空間的一個區(qū)域進行倒序,用戶告訴系統(tǒng)將文件的第一個字節(jié)映射到保留區(qū)域的第一個字節(jié)中,系統(tǒng)管理所有的文件緩存操作,不需要分配任何內(nèi)存,但是內(nèi)存映射文件仍然會因為電源故障之類的問題突斷進程而破壞文件的數(shù)據(jù).2注意錯誤的處理HANDLE hFile=CreateFile(..)。I/O操作不一定按其發(fā)出的相同順序完成十九. UnicodeMicrosoft堅定地支持Unicode,所有需要字符串的COM接口方法 Unicode對應(yīng)函數(shù)Strcat wcscatStrchrwcschrStrcmpwcscmpStrcpywcscpyStrlenwcslen使用sizeof(szBuffer)/sizeof(TCHAR)表示緩沖區(qū)大小,使用malloc(nCharacters*sizeof(TCHAR)) 內(nèi)核的對象的數(shù)據(jù)結(jié)構(gòu)只能被內(nèi)核訪問,應(yīng)用程序無法直接在內(nèi)存中找到這些數(shù)據(jù)結(jié)構(gòu). :對象管理小組中的任何成員和內(nèi)核對象的創(chuàng)建者都擁有對這個對象的全部訪問權(quán),而其他進程或線程均無權(quán)訪問該對象,如果忘記調(diào)用CloseHandle函數(shù),有可能出現(xiàn)內(nèi)存泄漏,除非終止運行時,系統(tǒng)將能確保所有內(nèi)容均正確清除.進程是不活潑的,進程從來不執(zhí)行任何東西,它只是
點擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1