delphi中string的管理

delphi对string采取的是copy on write的处理思路, 即在修改的时候才会发生copy,否则只是原来的引用++;

比如:

 1 var
 2     str1 : string;
 3     str2 : string;
 4 begin
 5     str1 := ‘changym‘;
 6     //分配内存并让str1计数管理;
 7
 8     str2 := str1;
 9     //并没有分配内存, 而是让str2指向str1的内存, str1的计数++;
10
11     str2 := ‘test‘;
12     //这个时候才为str2分配新的内存存储test, 且开始自己管理引用计数;并且str1的计数--;
13 end;
时间: 2025-01-05 06:30:19

delphi中string的管理的相关文章

Delphi中ARC内存管理的方向

随着即将发布的10.3版本,RAD Studio R&D和PM团队正在制作Delphi在内存管理方面的新方向. 几年前,当Embarcadero开始为Windows以外的平台构建新的Delphi编译器时,就核心语言功能和语言的整体感知而言,有很多讨论新Delphi与当前语言的兼容性.最终出现的决定是保持极高程度的兼容性,并采用一些重要而大胆的步骤来实现更能吸引新一代开发人员的语言. 什么是自动参考计数? (具有弱引用的交叉链接对象) 其中一个变化就是决定采用新的移动平台内存管理模式,遵循Appl

Delphi中String与PAnsiChar转换

来自:http://blog.sina.com.cn/s/blog_63970dc00101btq5.html ---------------------------------------------------------------------- 在application.messagebox()函数中的第一个参数要用到PAnsiChar. 所有的原生字符串类型String转PAnsiChar都需要经过AnsiString过渡 strAnsi:= PAnsiChar(AnsiString(

Delphi中String和PChar指向的内存中的字符串的互相转换

直接给一个源码的例子,自己去看 procedure TForm1.Button1Click(Sender: TObject); var S_Str: String; P_Str: PChar; begin GetMem(P_Str; Sizeof(Char)*20); S_Str:= 'I love China'; P_Str:= PChar(S_Str); S_Str:= ''; S_Str:= String(P_Str); ShowMessage(S_Str); FreeMem(P_Str)

如何用delphi中Data Module 管理数据库连接 和Adoquery 及 datasourse 等

首先关于使用data module 的理论可以参看,里面讲的很详细:https://wenku.baidu.com/view/073aa98aa0116c175f0e48e2.html 其次为什么要用data module呢? 其主要作用就是: 1.提升数据组件的重复使用 2.便于数据集中管理和维护 3.程序结构更加清晰,数据集被单独放置,form只负责用户界面,程序结构更加清晰: 对比: 使用前: 使用后: 如何使用data module: 第1步:file/new/other/ 第2步:点d

在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程!(更好的管理异常)

在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程! 如果直接使用Win32的API函数CreateThread()创建多个线程,也是可以创建的.但是,你应该明白,在每个线程中动态分配和销毁内存块,是需要同步保护的.Delphi语言中有一个在使用多线程环境下至关重要的全局变量IsMultiThread,系统在进行内存分配的时候,根据IsMultiThread变量值判断当前是否使用在多线程环境下,如果该变量为True,哪么,系统在分配和销毁内存的

Delphi 中的 procedure of object

其实要了解这些东西,适当的学些反汇编,WINDOWS内存管理机制,PE结构,看下李维的VCL架构剖析可以很好理解type TMyEvent = procedure of object;这是一种数据类型的定义,他定义了一个可以在类中使用的函数类型区别于type TMyProc = procedure; TMyEvent 和 TMyProc 都定义了一个函数类型,他们的差别是,TMyProc 不可以用在类中定义事件,TMyEvent 却可以. 如果你想知道问什么,那就需要深入了解事件类型以及函数类型

Delphi中根据分类数据生成树形结构的最优方法

一. 引言:    TreeView控件适合于表示具有多层次关系的数据.它以简洁的界面,表现形式清晰.形象,操作简单而深受用户喜爱.而且用它可以实现ListView.ListBox所无法实现的很多功能,因而受到广大程序员的青睐.    树形结构在Windows环境中被普遍应用,但在数据库开发中面对层次多.结构复杂的数据,如何快速构造树形目录并实现导航呢?    二. 实现关键技术:    在Delphi提供的控件中包含了TreeView控件,但树的具体形成还需要用户编写代码.即它的列表项要在程序

Delphi 中 COM 实现研究手记(一)

前言 前些日子用 Delphi 写了一个 Windows 外壳扩展程序,大家知道 Windows 外壳扩展实际上就是 COM 的一种应用 -- Shell COM,虽然整个程序写得还算比较顺利,但写完后还是感觉对 Delphi 中 COM 的实现有点雾里看花的感觉,因此我认为有必要花一点时间对 COM 在 Delphi 中的实现做一些研究.另外我也买了李维的新书 --<深入核心 -- VCL架构剖析>,里面有两章涉及了与 COM 相关内容,看完后我知道了COM 在 Delphi 中的实现是基于

(转)Delphi 中的字符串

一.Delphi 2009 之前的字符串(不支持 Unicode): Delphi 2009 之前的字符串分为 3 种:ShortString.AnsiString.WideString. [ShortString] ShortString 是一种比较古老的 Pascal 字符串格式,它最多只能容纳 255 个字节的字符.当我们声明一个 ShortString 类型的变量时,Delphi 会自动申请 256 个字节的内存空间给该变量,其中第一个字节用来存放字符串的长度,后面的 255 个字节用来