C DWORD與64位作業系統

2021-09-20 21:45:00 字數 774 閱讀 3479

【背景】鬧心,這兩天在除錯乙個c++的iocp伺服器,我在win x64下進行編譯,發現當客戶端斷開連線後,iocp伺服器端在銷毀(或重置)socket時會報錯:讀取訪問許可權衝突。this 是 0x78decc0。作為新手小白用著拙劣的除錯手段,花了20多個小時一步一步從析構函式追蹤到createiocompletionport()函式的第三個引數completionkey沒有正確被繫結。直到剛才才發現,我原來的**是

createiocompletionport((handle)listensockcontext->connsocket, completionport, (dword)listensockcontext, 0)

問題就出在這個(dword)listensockcontext上,在64位系統下,我的這個指標listensockcontext是64位的,而dword不論在64還是32位系統裡,都是32位(double word雙字),也就是說,這樣強制型別轉換,使我丟失了高32位資料。最後,將dword換成dword_ptr,完美解決。

createiocompletionport((handle)listensockcontext->connsocket, completionport, (dword_ptr)listensockcontext, 0)

【內容】dword即雙字,在64位和32位系統下這個值始終是32位的,而dword_ptr可以根據編譯的系統型別,編譯器自動選擇相對應的位數。

【p.s.】感謝會賣萌的吳老師。

32位作業系統與64位作業系統的區別

區別一 設計初衷不同 64位系統只能裝在64位電腦上。32位系統可以安裝在32位電腦上或64位電腦上。32位系統裝在64位電腦上會導致電腦無法達到最大效能。區別三 運算速度不同 64位系統資料寬度為64位,32位系統資料寬度為32位。理論上效能相差一倍。區別四 定址能力不同 64位系統優勢還體現在對...

64位與32位作業系統的不同

乙個電腦處理資料是有規定的格式的。32位的電腦存放資料的形式是對每個資料用32個二進位制位元組來存放。64位的意思就是用64位個二進位制位元組來存放。64位作業系統的資料寬度為64位,64位指令集可以執行64位資料指令,也就是說處理器一次可提取64位資料 只要兩個指令,一次提取8個位元組的資料 比3...

作業系統32位與64位的區別

經常有問我這樣的乙個問題,什麼是32位與64系統?32位系統與64位的區別等等。圍繞目前這些大家比較關係的問題,電腦百事網編輯這裡將與大家總結一下,關於32位作業系統與64位作業系統的區別。首先來介紹下什麼是32位與64位作業系統 32位和64位作業系統是指,cpu一次處理資料的能力是32位還是64...