今天在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,有空可以去圍觀一下。