学习 TList 类的实现[3] - 不能回避的话题: 内存分配
2024-10-21 10:14:55
在 Delphi 中, 几乎所有的类型都有对应的指针类型, 譬如: Char PChar Word PWORD Double PDouble TPoint PPoint 甚至一种类型对应这着几种指针类型, 譬如: Integer PInteger PINT WideChar PWideChar PWChar 即使它没有定义, 我也可以直接使用一个类型的指针, 譬如声明一个整数的指针变量: var px: ^Integer; 也可以先自定义指针类型, 再使用, 譬如: type MyIntPointer = ^Integer; var px: MyIntPointer; 看来声明指针类型还是挺方便, 但使用有点麻烦, 需要先申请内存!我们可以用以下三种方法, 为指针(譬如是一个 Double 类型的指针)去申请需要的内存:
var
pd: PDouble;
begin
New(pd);
pd^ := 99.9;
ShowMessage(FloatToStr(pd^)); {99.9}
Dispose(pd);
end;
var
pd: PDouble;
begin
GetMem(pd, SizeOf(Double));
pd^ := 99.9;
ShowMessage(FloatToStr(pd^)); {99.9}
FreeMem(pd);
end;
const
size = SizeOf(Double);
var
pd: PDouble;
begin
pd := AllocMem(size);
pd^ := 99.9;
ShowMessageFmt('%p -> %g', [pd, pd^]); { 00AD0EC0 -> 99.9 } ReallocMem(pd, * size);
ShowMessageFmt('%p -> %g', [pd, pd^]); { 00AF5030 -> 99.9 } pd := ReallocMemory(pd, * size);
ShowMessageFmt('%p -> %g', [pd, pd^]); { 00A6B090 -> 99.9 } FreeMem(pd);
end;
最新文章
- Linux下Steam中支持中文的办法
- 怎样记住Integer的最大值(有趣的思维和搞笑的回答)
- 【CodeVS 2822】爱在心中
- Android:单元测试Junit的配置
- Apache2 Axis2/C 搭建 hello world
- Android keyevent 中的各个值
- 读取.tmx地图
- 【Excel VBA】金额大写转换
- 关于JS 对象与JSON对象
- ActivityGroup简单介绍
- Ionic/Angularjs 知识点解析
- 二叉树终极教程--BinarySearchTree
- 带着新人学springboot的应用07(springboot+RabbitMQ 下)
- electron-vue:Vue.js 开发 Electron 桌面应用
- mapping values are not allowed in this context at line 115 column 10
- maven本地仓库中存在jar包,但编译不成功,显示jar包不存在
- Java基础篇--字符串处理(StringBuffer)
- pandas汇总和计算描述统计
- Java并发编程之final域的内存语义
- 雷林鹏分享:Ruby CGI 编程