PBuffer :=AllocMem(1024);//这里分配1024,看任务管理器,并没有1024这么大,是不是虽然分配了,但是没有利用,就不会用这么大?
PBuffer,如何给这个针数据赋值呢?比如在它的数据头赋值个Boolean型,然后紧跟其后赋值个integer? 最后可以读出这两个值。
PBuffer,如何给这个针数据赋值呢?比如在它的数据头赋值个Boolean型,然后紧跟其后赋值个integer? 最后可以读出这两个值。
解决方案 »
- 很茫然~DELPHIER何去何从?
- 值为0的INT值,如何转为Float?
- ¥的奇怪问题,在文本框中不显示,只要用鼠标在文本框拖动才显示,再拖一下又不显示了,换成$就没这种问题,人民币怎能用这个封口呢!!
- 不检查tree的当前节点有没有儿子,而在当前节点前显示那个+号,行不行,怎么做
- 急:报表问题!!!请赐教!
- 一个关于COM+的问题,非常有意思。
- 怎样判断ClientdataSet的是否在edit状态(等分涨起来一定多加分)?
- 关于Delphi的控件的名字的问题
- 一个轻量级问题,程序运行起来正常,但数据录入时输错了日期格式死机。只能是1980-08-08格式否则程序死锁该怎么办?
- delphi 中的XMLDOCUMENT 这个控件在什么地方?
- 怎样将db数据表导入到sql2000中
- TdxSkinController使用
这个可以用如下代码验证:var
P : Pointer;//当点了Button1后,程序占用的内存并未增加
procedure TForm1.Button1Click(Sender: TObject);
begin
GetMem(P , 50 * 1024 * 1024);
end;
//当使用这片内存时,内存就真实的从Winows分配物理内存并映射了
//点了Button2后,程序使用内存增加了大概50M
procedure TForm1.Button2Click(Sender: TObject);
begin
FillChar(P^ , 50*1024*1024 , 0);
end;
//释放
procedure TForm1.Button3Click(Sender: TObject);
begin
FreeMem(P);
end;
第二,Delphi的程序由自己的内存管理体系详见GETMEM.INC代码,你申请1024字节,但是内存管理发现现在已经有200空闲字节,那么就只需要延伸多余部分即可,所以增加的并不一定就是1024.第2个问题,指针赋值的问题一般这么写var
P : PAnsiChar;
begin
GetMem(P , ...
FillChar(P^ , ....
PBoolean(P)^ := True; //第1个字节
PInteger(P+1)^ := 100; //第2,3,4,5字节
//类推,最好的是定义一个对应的结构来处理
end;
Type
PRecFire = ^TRecFire;
TRecFire = packed record
B : Boolean; //第一个字节
i : integer; //第2,3,4,5字节
//.....
end;var
P : PRecFire;
begin
GetMem(P , ...
FillChar(P^ , ....
P.B := True; //第1个字节
P.i := 100; //第2,3,4,5字节
...
end;
我现在要做的事,分配的内存指针数据。取第一位,判断其Boolen值,如果是假,就放弃。如果是真
那么标记为假,然后将指针后移一位,返回其后移一位的地址。
function TForm1.Move2(S: Pointer):Pointer;
var
F:Boolean;
B:Pointer;
begin
CopyMemory(@F,s,1);
if not F then
b:=nil
else
begin
////怎么写?
end;
end;
function TForm1.Move2(S: Pointer):Pointer;
var
F:Boolean;
B:Pointer;
a:Integer;
a2:Integer;
begin
CopyMemory(@F,s,1);
if not F then
begin
b:=nil;
Result :=b;
end
else
begin
a:=Integer(Cardinal(S));
a2:=a-1;
b:=@Cardinal(a2);
end;
end;不知道有没有问题