首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

GDI CreateDIBSection 內存類型:返回 HBITMAP 內核對象,非 Write Combining 內存

     編輯:程式設計綜合問答

問題:CreateDIBSection 分配的寫屏內存是否為 Write Combining (WC) 類型?

答案:不是

  • 返回值 HBITMAP 是 GDI 內核對象,代表一個設備無關位圖 (DIB)。
  • 對應的用戶態指針 (ppvBits) 指向系統分配的普通分頁內存 (PAGE_READWRITE),可直接 CPU 讀寫像素。
  • Write Combining (WC) 是針對顯存/設備內存的特殊緩存類型 (MTRR/PAT 設置),需 VirtualAlloc + MEM_WRITECOMBINE 或驅動程序映射,CreateDIBSection 不涉及。

函數原型回顧

HBITMAP CreateDIBSection(
    HDC hdc,
    const BITMAPINFO* pbmi,
    UINT iUsage,
    VOID** ppvBits,   // 輸出:位圖像素數據指針
    HANDLE hSection,  // 可選:文件映射對象
    DWORD dwOffset
);
  • hSection = NULL 時,系統自動分配分頁文件支撐的內存 (普通 RAM)。
  • 若需特定內存類型 (如顯存映射),可自行創建 CreateFileMapping + SEC_COMMIT 傳入 hSection,但極少見。

性能提示

  • 頻繁 CPU 讀寫 DIB 像素時,鎖定/解鎖開銷極小 (僅用戶態指針操作)。
  • 若需 GPU 加速,請使用 Direct2D/Direct3D 纹理而非 GDI DIB。
  • CreateDIBSection 適合軟件繪圖、截圖、圖像處理等純 CPU 場景。

結論:CreateDIBSection 返回普通內存指針,非 WC 類型,直接通過 ppvBits 讀寫像素即可。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved