Delphi XE7中各种字符串与字符类型的内存结构
1. ShortString 类型
定义:type ShortString = string[255];
内存结构与大小:ShortString 是每个字符为单字节的字符串。ShortString 的变量实际是一个指针,它指向堆中一个256字节大小的数据结构,第一个字节是字符串总字节的数目(不一定是字符数目),后面是字符的字节表示。ShortString 类型的变量最多可以容纳255个字符,超出的部分将会被丢弃。ShortString 可以存储非ASCII字符,这些字符以操作系统的 codepage 存储,比如简体中文的 cp936 操作系统,非ASCII里面的字符是以GB2312(cp936)编码方式存储的。
2. AnsiString 类型
定义:type AnsiString = { built-in type };
内存结构与大小:AnsiString 是每个字符为单字节的字符串。AnsiString 的变量实际是一个指针,它指向堆中一个数据结构,假设有一个ans变量是AnsiString 类型,第ans-4到ans-1这4个字节是字符串总字节的数目(不一定是字符数目),第ans-8到ans-5这4个字节是字符串被引用的次数,第ans-10到ans-9这2个字节是一个字符有几个字节(查看内存发现貌似一直都是1),第ans-12到ans-11这2个字节是code page代码页,后面(即ans指向的地址处)是字符的字节表示。AnsiString 类型的变量最多可以容纳的字符与可用内存大小有关。
2. String 类型
定义:type String = UnicodeString;
String 是UnicodeString的别名,但是当以String[200]类似的形式使用时是ShortString类型。
Delphi XE7中各种字符串与字符类型的内存结构的更多相关文章
- Python中的字符串与字符编码
本节内容: 前言 相关概念 Python中的默认编码 Python2与Python3中对字符串的支持 字符编码转换 一.前言 Python中的字符编码是个老生常谈的话题,同行们都写过很多这方面的文章. ...
- 关于delphi XE7中的动态数组和并行编程(第一部分)
本文引自:http://www.danieleteti.it/category/embarcadero/delphi-xe7-embarcadero/ 并行编程库是delphi XE7中引进的最受期待 ...
- Delphi XE7中新并行库
Delphi XE7中添加了新的并行库,和.NET的Task和Parellel相似度99%. 详细内容能够看以下的文章: http://www.delphifeeds.com/go/s/119574 ...
- 【转】Python中的字符串与字符编码
[转]Python中的字符串与字符编码 本节内容: 前言 相关概念 Python中的默认编码 Python2与Python3中对字符串的支持 字符编码转换 一.前言 Python中的字符编码是个老生常 ...
- Analyze 静态分析工具中显示 大量的CF类型指针 内存leak 问题, Core Foundation 类型指针内存泄漏
Analyze 静态分析工具中显示 大量的CF类型指针 内存leak 问题 今天使用Analyze 看了下项目, 解决办法,项目中使用了ARC,OC的指针类型我们完全不考虑release的问题 ...
- Delphi XE7中使用JSON
Delphi XE7有一个对JSON处理的单元,在你需要使用JSON的单元里面引入"System.json",随后你就可以用Delphi自己的json处理类了.我写的小例子只是对包 ...
- java字符串以及字符类型基础
介绍一下java字符集和字符的编码方式, 首先要区分一下字符集和字符编码.所谓的字符集 类似于unicode,GB2312,GBK,ASCII等等.因为一开始只有26个英文字母需要 编一下号.所有用下 ...
- delphi XE7 中的消息
在delphi XE7的程序开发中,消息机制保证进程间的通信. 在程序中,消息来自: 1)系统: 通知你的程序用户输入,涂画以及其他的系统范围的事件: 2)你的程序:不同的程序部分之间的通信信息. ...
- 浮点型 float和double类型的内存结构和精度问题
首先引用一个例子在java中可能你会遇到这样的问题: 例:0.99999999f==1f //true 0.9999999f==1f //false 这是超出精度造成的,为了知道为什么会造成这样的问题 ...
随机推荐
- java 旧url 处理的解决方法
@RequestMapping(value = {"/search"}) public void errorPath(HttpServletResponse response, @ ...
- C++使用vector
#include <iostream> #include <string> #include <vector> using namespace std; void ...
- ActiveMQ笔记(3):基于Networks of Brokers的HA方案
上一篇介绍了基于ZK的ActiveMQ HA方案,虽然理解起来比较容易,但是有二个不足: 1) 占用的节点数过多,1个zk集群至少3个节点,1个activemq集群也至少得3个节点,但其实正常运行时 ...
- [LeetCode] LFU Cache 最近最不常用页面置换缓存器
Design and implement a data structure for Least Frequently Used (LFU) cache. It should support the f ...
- [LeetCode] Search for a Range 搜索一个范围
Given a sorted array of integers, find the starting and ending position of a given target value. You ...
- C语言学习 第十一次作业总结
作业总结 两次的作业,都是和指针有关.从第一次的作业开始,我就多次让同学们思考这个问题:为什么要用指针,为什么在函数的形参中要使用指针.如果能够想明白这2个问题,那么同学们应该会指针的了解就差不多足够 ...
- 我要成为前端工程师!给 JavaScript 新手的建议与学习资源整理
来源于:http://blog.miniasp.com/post/2016/02/02/JavaScript-novice-advice-and-learning-resources.aspx 今年有 ...
- SSM整合(二):Spring4与Mybatis3整合
上一节测试好了Mybatis3,接下来整合Spring4! 一.添加spring上下文配置 在src/main/resources/目录下的spring新建spring上下文配置文件applicati ...
- jquery-读取form表单中的所有数据列表
代码: <script> $(function() { $('#submit').click(function() { var d = {}; var t = $('form').seri ...
- MySQL索引原理及慢查询优化
原文:http://tech.meituan.com/mysql-index.html 一个慢查询引发的思考 select count(*) from task where status=2 and ...