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