问一些不是很深的问题,欢迎各位参与(100分)

  • 主题发起人 主题发起人 HORNEY
  • 开始时间 开始时间
H

HORNEY

Unregistered / Unconfirmed
GUEST, unregistred user!
1。建立数组以后,那个数组名是不是实际上就是一个的指针?
2。动态数组长度改变时,其内存是怎样分配的?
3。多维数组是在内存中是怎样存在的?(包括静态的和动态的)
4。DELPHI中分配内存时是怎样实现线程安全的。
 
的确不是很深的问题,但足够淹死我了。 闪!
 
静态数组不是指针,动态数组需要指针
动态数组随机分配内存
delphi的多维数组是按行列存储,而f语言是按列行存储
不太清楚
 
look 1 look
 
>>硬木花椒
那么动态数组所谓随机分配,是一定要找一块尺寸>=它的内存才行,还是像磁盘存储一样
可以一簇一簇接下去。另外,如果数组延长的话,再分配内存时,原来数组里面的值会不
会被刷掉(我是指延长以后的数组里面的值是不是DELPHI保存再重新存进去的?)?
 
1.是
2;;;
3;;;
4;;;
惭愧...
 
其实象这些很基本的理论问题,我们往往忽视;
毕竟我们是在做实际的开发!

1.是的
2.多余的被释放,少的申请
3.堆栈
4.多个线程可以共享同一块内存
 
千雪兄,能否给我详细解释一下后面两个问题吗?
 
不错的问题
让大家都长长知识(基本知识)
 
如果使用连续内存就不是动态数组了,它好像是初始化一块基本内存,然后随着数据的增长
在内存中找适合的内存块,这样循环下去。
但是它必须满足基本内存单位,例如4B的整数倍
 
再问各位一个问题:
大家都知道可以通过指针写数据,比如PT^=4,那么接下来我要问的是,如果我想对这片
数据(无论变量或是HEAP)中的某个字节进行赋值,那么用这样的指针会不会造成“块写”
如果会的话,应如何解决;反之如果不会的话,那么块写数据又应如何实现。
 
会“块写”。解决先把原来的内容转换成二进制,如:原来的是4,0100,要改成0101,因为
0101是5,这样只要用5对它赋值就可以得到要求了。
 
1. 数组就是一块逻辑上连续的内存(物理上是否连续不得而知),数组名是这块内存的
; ;标识,你当然可以说它是指针,在 C 里,数组名完全就是指针

2. 试图改变数组长度时,并不是自说自话想改变就改变的,总得做些事情要系统给你
; ;分配资源,SetLenth 或者 Malloc 之类的

3. 对于系统来说,不存在什么一维数组或是多维数组,都是一块内存而已,维的概念
; ;仅仅对程序员以及编译器有意义,到了汇编级寻址方式都一样。

4. 所谓线程安全也是代码级的概念,你自己申请的内存由你自己负责保证线程安全,加
; ;锁同步什么的都由你来做,结果对错也是你的事,跟 Delphi 无关。当然有一些所谓
; ;线程安全的VCL组件,那也是因为里面包含了保证安全的相应代码,而不是说有哪块内
; ;存生来安全的。
 
3:多维数组应该是一维数组的特例吧,在C和delphi中是按行列存储的,也就是先按一维数组
的原理把第一行存完了,再存第二行,第三行。。。,例如C中A[2][2]是从A[0][1],A[0][1]
他只是把A[1]当成一维数组A[1]中的A了也就是假定他是名这样就应该可以理解了吧
由于本人先学的是C故用C解释其实delphi中和c中也是一样的
 
1:静态数组名只是表示一个地址,但不是指针。
2、3、4看来只有看源代码才知道了。
 
多人接受答案了。
 
后退
顶部