siseof的问题 var str: string[20]; sizeof(str)等于多少周爱民的书上说堆栈的分配最小单位是4字节所以是24但是我D7上实验出来的效果是21 有D7一下版本的实验效果 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 相信你自己的实验。照你理解sizeof(byte)应该等于4? 我突然想,可能sizeof与分配的无关与真正使用的有关 字符串类型实际上就是一个字符序列,序列的头部是一个长度字节,指示当前字符串的长度,由于只用一个字节来表示字符串的长度,所以字符串的长度不能超过255个字符。当然程序员可以定义长度声明更短的字符串以节约存储空间,正如你的代码: var str: string[20]; 用sizeof得到的值当然就是你指定的长度20加上字符串类型头部的长度共21了 贴出原话:短字符串的声明有两种方式var var1: string[20]; var3: shortstring; var1的声明限定字符串长度为0~20字节,var2声明使用默认值,因而限定为0~255字节。Delphi总是按最大上限为段字符串分配内存。这样,最少的情况下,var1将占用20+1字节,而var2将占用255+1字节。----这1字节是var1[0],var2[0]的记数位保留的。 由于堆栈以4字节为单位进行分配。因此var1在堆栈中将被分配24字节,而var2将被分配256字节。源于堆栈的这种分配,在应用程序内存区中,短字符串类型化常量采用与堆栈分配一致的长度分配。 MSDN上对sizeof的定义是,对一位数组使用sizeof会返回数组的长度,实际上并不是堆栈的长度 这个和堆栈分配多少空间没有关系。SizeOf 仅仅返回你定义的数据的数据类型的长度,不会因为在堆中或者在栈中因为需要对齐而多分配了几个字节就会返回分配的字节,实际上,你也不能使用多分配出来的那部分内存(强行访问除外)数据在内存中,尤其是在栈中,实际分配的内存往往和数据本身的长度不等。 升级到Delphi2010的问题,关于WM_QueryEndSession 关于TWebBrowser,以及TIDHttp控件的使用 intraweb套用模版出问题?怎么解决 数据库恢复后程序不能用,说连接失败或者表无效! 各位想问一下用intraweb 开发的web程序如何发布阿 请问那里有DELPHI5.0企业版的下载呢 求助!DELPHI二进制的问题! 为什么俺的远程抓图程序连抓5次就报错?! 怎么判断TreeView控件当前在哪个节点呀!! BitBlt是hdc的画图命令,它的写字命令是什么? 调用窗口的数值回传问题 ==== 说说你在十一都干啥 ====
var
str: string[20];
用sizeof得到的值当然就是你指定的长度20加上字符串类型头部的长度共21了
短字符串的声明有两种方式
var
var1: string[20];
var3: shortstring;
var1的声明限定字符串长度为0~20字节,var2声明使用默认值,因而限定为0~255字节。
Delphi总是按最大上限为段字符串分配内存。这样,最少的情况下,var1将占用20+1字
节,而var2将占用255+1字节。----这1字节是var1[0],var2[0]的记数位保留的。
由于堆栈以4字节为单位进行分配。因此var1在堆栈中将被分配24字节,而var2将被
分配256字节。源于堆栈的这种分配,在应用程序内存区中,短字符串类型化常量采用与堆
栈分配一致的长度分配。
SizeOf 仅仅返回你定义的数据的数据类型的长度,不会因为在堆中或者在栈中因为需要对齐而多分配了几个字节就会返回分配的字节,实际上,你也不能使用多分配出来的那部分内存(强行访问除外)
数据在内存中,尤其是在栈中,实际分配的内存往往和数据本身的长度不等。