作者virdust2003 (替机壳洗个热水澡)
看板C_Sharp
标题Re: [问题] 为何还有结构存在?
时间Tue Jul 12 13:56:44 2005
就我所知, heap 可以看成一块乱糟糟的 记忆体
物件的东东都是存在这里,也就是随便挖一块记忆体去放,所以会有很多空格
但是我们以前学的不都是需要一个 SP or BX (忘了是什麽了) 来取得 参数
但是物件需要一个指标,也就是那块长长的记忆体位置存的都是物件的位址
^^^^^^^^^^^^附注
所以要存取物件的值的话,总共需要存取两次记忆体。但Stack 里面只需要32Bit就好
但若宣告的是 Struct 的话,例如 Point ,那麽 x,y 就是直接放在 Stack 里面
存取的话,直接用暂存器加减X就可以取得了,也就是一次KO~
不知道这样说的明白吗?
PS:曾问过我的组语老师,Heap相关问题,他回说:「Heap是什麽?」
所以也有可能 Heap 是GC出来之後的产物
至於 16byte以下用 Struct效率比较好,是在TechEd 2004 听到蔡学镛讲的~
物件导向的语言 其字串也是放在 Heap 中,所以每次指派才都会多出一块垃圾记忆体~
但若早期的C, 程式一开始即宣告好的字串就是 Stack了~
动态的话,我想应该也叫做Stack ,因为那时候没有gc可以帮你回收 ,都要自己free 掉
附注:
长长的记忆体指的是 Code从上面开始,Data从下面开始,以前学组语的那种模型
所以Data太多还会盖到 Code ,我觉得还满好笑的~
※ 引述《virdust2003 (替机壳洗个热水澡)》之铭言:
: 16 byte 以下 struct 比较快
: 因为stack 而不是 heap
: ※ 引述《tomex (tomex_ou)》之铭言:
: : 既然结构(struct)与类别(class)的差别只在预设public及private差别
: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
: 哪里看到的?
: : 为何c#不通通以class来代替struct呢?
: : 像int, Size(x,y)都是用struct,应该有原因吧?!
--
-----------------------------------------------------------------------------
功课重,Project多的好帮手--专案王
http://steven.twbbs.org/ProjectKing
增加右键的威力RightMenuKing--右键王
http://steven.twbbs.org/RightMenuKing/
备份重要档案的好帮BackupKing--备份王
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.164.5
※ 编辑: virdust2003 来自: 140.113.164.5 (07/12 14:05)