在 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;

学习 TList 类的实现[3] - 不能回避的话题: 内存分配的更多相关文章

  1. 学习 TList 类的实现[4]

    现在准备一步步地模拟 TList 类, 建立一个自己的 TMyList. 首先, 这个类中应该包括前面提到的那个 Pointer 数组(TPointerList)的指针(PPointerList): ...

  2. 学习 TList 类的实现[8]

    现在准备建立 Items 数组属性; 在 public 区输入下面代码:property Items[Index: Integer]: Pointer; 执行 Shift+Ctrl+C 后的代码是: ...

  3. 学习 TList 类的实现[1]

    最近整理了一些函数列表, 算是一个宏观的安排; 等以后再碰到一些函数时就可以放置的更有次序一些. 我对函数与类的理解是: 函数是一个功能模块, 类是一个更强大的功能模块; Delphi 已经提供了很多 ...

  4. 学习 TList 类的实现[2]

    我原来以为 TList 可能是一个链表, 其实只是一个数组而已. 你知道它包含着多大一个数组吗? MaxListSize 个!MaxListSize 是 Delphi 在 Classes 单元定义的一 ...

  5. 学习 TList 类的实现[6]

    实现 TMyList.Add 函数. TList 中的 Add 函数用到了一个 Grow 方法, 它的原理是元素越多就为以后准备更多内存, 我们这里省略为预留 4 个元素的内存; TList 中的 A ...

  6. 学习 TList 类的实现[5]

    先来实现 TMyList.SetCapacity. 马上会想到下面代码: procedure TMyList.SetCapacity(const Value: Integer); begin   if ...

  7. 学习 TList 类的实现[7]

    总结目前 TMyList 已具备的功能(3 个方法.3 个属性): Add: 添加; Delete: 删除; Clear: 清空;Count: 元素总数;Capacity: 已存在的所有元素位置数;L ...

  8. Java学习之旅基础知识篇:数组及引用类型内存分配

    在上一篇中,我们已经了解了数组,它是一种引用类型,本篇将详细介绍数组的内存分配等知识点.数组用来存储同一种数据类型的数据,一旦初始化完成,即所占的空间就已固定下来,即使某个元素被清空,但其所在空间仍然 ...

  9. C++ Primer 学习笔记_98_特殊的工具和技术 --优化内存分配

    特殊的工具和技术 --优化内存分配 引言: C++的内存分配是一种类型化操作:new为特定类型分配内存,并在新分配的内存中构造该类型的一个对象.new表达式自己主动执行合适的构造函数来初始化每一个动态 ...

随机推荐

  1. awstat分析nginx日志

    awstat分析nginx日志 http://lxw66.blog.51cto.com/5547576/1323712 server{ listen ; server_name localhost; ...

  2. C# FUNC 应用

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Func ...

  3. Codeforces 441C Valera and Tubes

    题目链接:Codeforces 441C Valera and Tubes 没看到r >= 2一直错.让前几个管子占用2个格子.最后一个把剩下的都占用了.假设问题有解.这样做一定有解.其它策略就 ...

  4. jvm 性能调优 经验总结---转

    最近因项目存在内存泄漏,故进行大规模的JVM性能调优 , 现把经验做一记录. 一.JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老 ...

  5. iOS_20_微博Dock的尾随切换

    终于效果图:Dock尾随HomeVC一起切换 要求: 当点击HomeVC里面的微博列表的某一行时候, push到StatusDetail微博详情控制器,而且Dock也一起消失 当点击StatusDet ...

  6. 前端面试题 -- JS篇

    前端面试题 -- JS篇 类型 1.js中有哪些数据类型,并解释清楚原始数据类型和引用数据类型 js中共有null,undefined, string,number,boolean,object六种数 ...

  7. 解析html文档的java库及范例

    用这个工具jsoup <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <v ...

  8. java命令执行jar文件

    如果java -jar target/hbase-demo-1.0-SNAPSHOT.jar HBaseDemo 提示如下 no main manifest attribute, in target/ ...

  9. Jar包版本查看方法

    原文:  https://blog.csdn.net/u011287511/article/details/66973559 打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目 ...

  10. ID、Class和标签选择器优先级

    按一般论:ID > Class > 标签 1.如以下样式: <div id="id" class="class">选择器优先权</ ...