文档章节

System.GetMem、System.FreeMem - 申请和释放内存

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 305
阅读 4
收藏 0
点赞 0
评论 0
如果只为单个指针分配内存, 和 New 和 Dispose 是一样的; 与之不同的是: GetMem 可以申请连续的多个内存块.

举例:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;
implementation

{$R *.dfm}

Type
  TMyRec = record     {定义结构}
    name: string[8];
    age : Word;
  end;
  PMyRec = ^TMyRec;   {定义结构指针}

var
  pr: PMyRec;

procedure TForm1.FormCreate(Sender: TObject);
begin
  {同时分配 3 个结构的内存; 此时的三个结构在内存中是连续的}
  GetMem(pr, SizeOf(TMyRec) * 3);

  {此时 pr 指向第一个结构, 赋值}
  pr.name := '张三';
  pr.age := 11;

  {让 pr 指向第二个结构, 赋值}
  Inc(pr);
  pr.name := '李四';
  pr.age := 22;

  {让 pr 指向第三个结构, 赋值}
  Inc(pr);
  pr.name := '王五';
  pr.age := 33;

  {先回到第一个结构, 然后依次读取}
  Dec(pr, 2);
  ShowMessage(Format('%s %d 岁', [pr.name, pr.age])); {张三 11 岁}
  Inc(pr);
  ShowMessage(Format('%s %d 岁', [pr.name, pr.age])); {李四 22 岁}
  Inc(pr);
  ShowMessage(Format('%s %d 岁', [pr.name, pr.age])); {王五 33 岁}

  {从第一个结构, 清除 3 个结构大小的内存, 这样就删除了上面三个结构}
  Dec(pr, 2);
  FreeMem(pr, SizeOf(pr^) * 3); {SizeOf(TMyRec)  和 SizeOf(pr^) 是一样的}
end;

end.

 
 
 
 
 

 

 

  
System 单元下的公用函数目录

本文转载自:http://www.cnblogs.com/del/archive/2008/03/27/1125778.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
使用Memcheck发现常见的内存问题

1、使用未初始化的内存 全局变量和静态变量的初始值均为0,而局部变量和动态申请的变量,其初始值为随机值。如果程序使用了随机值的变量,那么程序的行为就变得不可预期。 输出结果会显示:C...

小呀小蜗牛
2015/10/22
149
0
C语言 malloc 内存泄漏

错误代码如下: 这个函数先为三个结构体变量申请内存空间,其中一个申请失败就返回失败。如果全都申请成功的话,就对结构体变量进行初始化工作。逻辑上似乎没有什么问题,但是这里隐藏了一个...

u011303443
03/18
0
0
C语言开发中的内存检测基本模块

一、前言 在用C语言开发产品时,由于C语言中的指针操作的灵活性,因此在使用指针时也需要特别小心,稍微不严谨就会导致内存问题,如内存未初始化,内存泄露,内存重复释放等。 但是在实际开发...

墙头草
2011/05/26
0
0
C语言内存管理讲解

谨记 人生有两条路,一天需要用心走,叫做梦想;一条需要用脚走,叫做现实。心走的太快,会迷路的;脚走的太快,会摔倒的;心走的太慢,现实会苍白;脚走的太慢,梦不会高飞。人生的精彩,是...

长风留言
2017/11/22
0
0
C语言解释器的实现--存储结构(一)

目录: 1. 内存池 2. 栈 3. Hash表 1.内存池 在一些小的程序里,没什么必要添加内存管理模块在里面。但是对于比较复杂的代码,如果需要很多的内存操作,那么加入自己的内存管理是有必要的。至...

xumaojun
03/30
0
0
开源C++函数库Boost内存池使用与测试

  【IT168 专稿】Boost库是一个可移植的开源C++函数库,鉴于STL(标准模板库)已经成为C++语言的一个组成部分,可以毫不夸张的说,Boost是目前影响最大的通用C++库。Boost库由C++标准委员会库...

it168网站
2011/07/27
0
0
[CareerCup] 13.9 Aligned Malloc and Free Function 写一对申请和释放内存函数

13.9 Write an aligned malloc and free function that supports allocating memory such that the memory address returned is divisible by a specific power of two. EXAMPLE alignmalloc......

机器的心脏
2017/12/15
0
0
InnoDB内存管理源码剖析

InnoDB的内存管理分为3层。1、在底层InnoDB创建一个通用内存池,负责为系统提供小块内存,另外InnoDB还创建缓冲池,可以为系统提供更大块的内存。两者都是向系统申请内存,只申请一次。其中,...

jzzlee
2016/05/04
109
0
C/C++内存管理

void realloc(void p,sizet newsize) 如果p为NULL,则当malloc使用。 如果newsize为0,则释放p所指向的空间。返回NULL 如果内存不足,则原先p指向的空间不变,返回NULL 如果系统第一次分配的空...

sdoyuxuan
2017/07/22
0
0
C++内存泄露和检测

C++中的内存泄露一般指堆中的内存泄露。堆内存是我们手动malloc/realloc/new申请的,程序不会自动回收,需要调用free或delete手动释放,否则就会造成内存泄露。内存泄露其实还应该包括系统资...

ucliaohh
2015/09/16
173
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

对基于深度神经网络的Auto Encoder用于异常检测的一些思考

一、前言 现实中,大部分数据都是无标签的,人和动物多数情况下都是通过无监督学习获取概念,故而无监督学习拥有广阔的业务场景。举几个场景:网络流量是正常流量还是攻击流量、视频中的人的...

冷血狂魔
11分钟前
0
0
并发设计之A系统调用B系统

A-->B A在发送请求之前,用乐观锁,减少对B的重复调用,这样一定程度上是幂等性。 比如A系统支付功能,要调用B系统进行支付操作,但是前端对"支付"按钮不进行控制,即用户会不断多次点击支付...

汉斯-冯-拉特
31分钟前
0
0
HTTP协议通信原理

了解HTTP HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务。 HTTP使用...

寰宇01
54分钟前
0
0
【Java动态性】之反射机制

一、Java反射机制简介

谢余峰
55分钟前
1
0
Centos 6.X 部署环境搭建

1.Linux学习笔记CentOS 6.5(一)--CentOS 6.5安装过程

IT追寻者
今天
0
0
博客即同步至腾讯云+社区声明

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=8vy9bsmadbko...

xiaoge2016
今天
1
0
大数据教程(3.1):Linux系统搭建网络YUM源服务器

博主在前面的2.5章节讲述了linux系统本地YUM服务器的搭建和httpd轻量级静态网站服务器的安装,本节博主将为大家分享内网环境中搭建自己的网络YUM服务器的全过程。如果大家对本地YUM服务器还不...

em_aaron
今天
1
0
蚂蚁技术专家:一篇文章带你学习分布式事务

小蚂蚁说: 分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在这几年越来越火的微服务架构中,几乎可以说是无法避免,本文就围绕分布式事务...

Java大蜗牛
今天
1
0
新的Steam应用将拓展服务项目

导读 未来几周,Steam将推出两个免费的应用程序Steam Link和Steam Video。这两个应用程序都旨在拓展Steam平台的业务和便利性。 即将开放的Steam Link应用程序最先提供了Android测试版,它将允...

问题终结者
今天
0
0
golang 第三方包的使用总结

golang 第三方包的安装的方法: 1. go get 安装 $ go get github.com/gin-gonic/gin 注意:执行go get 命令需要先安装git命令,并配置git全局变量。 2. 源码包安装 由于国内网络问题,很多时...

科陆李明
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部