[郑州]~~Y.P~~(346970558) 11:27:01
[铁岭]Caiest(10040231) 呢?
研究什么呢? 我这会在惦记你的分呢。不知道满不满意阿你。
[郑州]~~Y.P~~(346970558) 11:37:01
预备知识—程序的内存分配
一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
[武汉]红色(474536628) 11:41:33
浙大宋广华《LINUX操作系统讲座》这个太好了,正在努力学习,争做祖国的花骨朵!
[武汉]红色(474536628) 11:41:57
[铁岭]Caiest(10040231) 11:42:54
我来了
[铁岭]Caiest(10040231) 11:43:03
一会儿放分啊
[武汉]红色(474536628) 11:42:56
往偶的ID上大量的放,来者不拒!
[合肥]飞刀(297099102) 11:43:17
YP
[铁岭]Caiest(10040231) 11:44:24
你是
[铁岭]Caiest(10040231) 11:44:27
传说中的
[铁岭]Caiest(10040231) 11:44:29
老大?
[郑州]~~Y.P~~(346970558) 11:43:52
老大?看看偶说滴,再说点嘛,大都是我猜的
[铁岭]Caiest(10040231) 11:44:50
偶等你一上午了
[合肥]飞刀(297099102) 11:44:18
偶这两天都快3点睡
[合肥]飞刀(297099102) 11:44:44
起来没多久
[铁岭]Caiest(10040231) 11:45:47
老大来看看
[铁岭]Caiest(10040231) 11:45:53
这段程序错在哪里?
[铁岭]Caiest(10040231) 11:45:54
var
S:String;
P
Byte;
I:Cardinal;
begin
S:='abc';
P:=Pointer(S);
for I:=0 to Length(S)-2 do
begin
P^:=P^+1;
Inc(P);
end;
Caption:=string(S);
end
[武汉]红色(474536628) 11:45:13
刀哥辛苦了!
[铁岭]Caiest(10040231) 11:46:19
P^:=P^+1;
这一句,出现内存错误
[郑州]~~Y.P~~(346970558) 11:45:34
浙大宋广华《LINUX操作系统讲座 ??视频吗? 共享一下嘛。呵呵
[武汉]红色(474536628) 11:45:39
3点睡,做贼去了?
[武汉]红色(474536628) 11:45:45
==
[铁岭]Caiest(10040231) 11:47:53
如果
SetLeng(S,3)
S[1]:='a';
S[2]:='b';
S[3]:='c';
就行
[上海]阿紫(512551) 11:47:01
[武汉]红色(474536628) 11:47:32
http://zjtu.com/%CB%CE%B9%E3%BB%AA_LINUX_%CA%D3%C6%B5/
[武汉]红色(474536628) 11:47:37
下的地址
[武汉]红色(474536628) 11:47:47
顺雷下快]
[郑州]~~Y.P~~(346970558) 11:47:49
谢谢,瞅瞅先。
[郑州]~~Y.P~~(346970558) 11:49:35
嘻嘻,偶已经下了快一半了。
[郑州]~~Y.P~~(346970558) 11:49:53
噢,错了。不是一半,多看了一个0
[武汉]红色(474536628) 11:50:15
[武汉]红色(474536628) 11:51:07
csf格式的,要装个科建播放器看
[郑州]~~Y.P~~(346970558) 11:51:35
好人做到底,把这个什么科健也给了俺吧。呵呵
[武汉]红色(474536628) 11:51:43
[武汉]红色(474536628) 11:51:56
==
[合肥]飞刀(297099102) 11:52:20
[铁岭]Caiest,你的问题在于S := 'abc',是个字符串常量,放在全局静态数据区,S直接指向这个地址,而全局静态数据区的字符串常量是不容许改的
[铁岭]Caiest(10040231) 11:53:44
哦,那如果S是个全局的呢?
[铁岭]Caiest(10040231) 11:54:04
我记得上次,说局部string变量,是静态数据区
[武汉]红色(474536628) 11:53:09
刀哥就是牛!佩服!
[铁岭]Caiest(10040231) 11:54:09
全局的也是吗?
[合肥]飞刀(297099102) 11:53:54
S[n]这样引用,Delphi就会先UniqueString,分配内存,搞个唯一计数的新的字符串变量出来,这是在堆上分配的
[合肥]飞刀(297099102) 11:54:05
[铁岭]Caiest(10040231) 11:53:10
我记得上次,说局部string变量,是静态数据区
错误!
[铁岭]Caiest(10040231) 11:55:14
?
[合肥]飞刀(297099102) 11:54:27
变量是不可能在静态数据区的
[铁岭]Caiest(10040231) 11:55:51
铁岭] 13:20:21
测试一下,的确是
[铁岭] 13:20:58
不过不是说常量字符串的引用计数才是-1吗?
不是指
const
S:String
?
[成都]千余 13:21:55
事实证明,你如果写在过程里的局部string
类型赋常量,它还是这么认为的
[合肥]飞刀(297099102) 11:55:58
不过不是说常量字符串的引用计数才是-1吗?
没错
[合肥]飞刀(297099102) 11:56:37
你若这样写:
S := '';
S := S + 'abc';
结果就完全不一样
[铁岭]Caiest(10040231) 11:57:39
哦,也许我理解了
[铁岭]Caiest(10040231) 11:58:10
'abc'它是在常量区的
S:='abc'只是把指针指向一个区域
[铁岭]Caiest(10040231) 11:58:20
S是变量,'abc'是常量
[郑州]~~Y.P~~(346970558) 11:57:38
[铁岭]Caiest(10040231) 11:58:42
是这样吗
[武汉]红色(474536628) 11:58:04
[武汉]红色(474536628) 11:58:32
有那么一点点晕了,继续学习!
[铁岭]Caiest(10040231) 11:59:42
我还以为你在摇头,说不是呢
[合肥]飞刀(297099102) 11:58:55
对了,呵呵
[武汉]红色(474536628) 11:58:55
[郑州]~~Y.P~~(346970558) 11:59:12
不会吧,这跟我上面说的一样阿,你怎么会晕了?
[铁岭]Caiest(10040231) 12:00:13
大家放松一下吧
[合肥]飞刀(297099102) 11:59:19
S并没有重新分配内存容纳'abc'
[铁岭]Caiest(10040231) 12:00:28
谢谢各位