Win7 64位內存申請上的一個小坑!!!

今天在Win7 64位上寫了這麼一段程序:

var
  p: Pointer;
  iSize: Integer;
begin
  iSize := 1024 * 2;
  GetMem(p, C_1M * iSize);

簡單點兒說,就是申請一塊2G的連續內存,結果每次都申請失敗,還以爲操作系統不支持。

折騰半天后才發現,其實是iSize的問題,因爲iSize是32位整數,所以當達到2G時,此時的iSize=0,爲啥等於0?已經到32位整數上限了唄。

找到原因後,自然就容易解決了,將iSize的類型改爲Cardinal,這樣上限就變成4G了,當然,最好還是把iSize改成Int64,比如下面:

var
  p: Pointer;
  iSize: Int64;
begin
  iSize := 1024 * 3;
  GetMem(p, C_1M * iSize);

改完之後就一切OK了,希望大家在碰到這個小坑時可以輕鬆度過。。。

===============

BTW:自己寫得web服務器在moonserver.cn,有空可以去圍觀一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章