Re: [問題] malloc問題

看板C_and_CPP (C/C++)作者 (我要加入劍道社!)時間16年前 (2009/03/16 20:15), 編輯推噓1(102)
留言3則, 1人參與, 最新討論串5/6 (看更多)

03/16 18:13,
傳 reference 效能和 pointer 一樣,並不會比較快
03/16 18:13

03/16 18:28,
傳指標的話 有的時候還要 *p 取值
03/16 18:28
傳 reference 本質上還是傳 pointer 呀 只是 dereference 的時候 compiler 幫你做掉了 直接來看 assembly 就知道了 #include <cstdlib> void alloc_mem(int** p) { *p = (int*)malloc(sizeof(int)); } void alloc_mem(int*& p) { p = (int*)malloc(sizeof(int)); } 使用 gcc 編出的結果: _Z9alloc_memRPi: ; alloc_mem(int*&) .LFB14: pushq %rbx .LCFI0: movq %rdi, %rbx movl $4, %edi call malloc movq %rax, (%rbx) popq %rbx ret ... _Z9alloc_memPPi: ; alloc_mem(int**) .LFB13: pushq %rbx .LCFI1: movq %rdi, %rbx movl $4, %edi call malloc movq %rax, (%rbx) popq %rbx ret 兩邊的 assembly 完全相同。

03/16 18:30,
在32bit系統下,4byte以下的資料兩者效能是一樣的
03/16 18:30

03/16 18:30,
因為reference = pointer, 32-bit系統下是4bytes
03/16 18:30

03/16 18:31,
所以基本上pass pointer的話,傳ref不但沒意義,而且..
03/16 18:31

03/16 18:31,
我不覺得&*很好閱讀 -_- 況且有時還有const問題
03/16 18:31

03/16 18:32,
說錯 4byte下兩者一樣, 4bytes以下ref還會慢一點
03/16 18:32

03/16 18:32,
當然4bytes以下的資料非常少見就是
03/16 18:32
你好像誤會什麼了 他是要去改變引數的內容 所以要嘛傳 reference 要嘛傳 pointer 而這種情況下兩者做的事是一樣的 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.115.146.106

03/16 22:52, , 1F
其實用 compiler 觀點下去想就好了, 不使用 pointer
03/16 22:52, 1F

03/16 22:53, , 2F
有什麼 magical 的方法實現 reference 呢?
03/16 22:53, 2F

03/16 22:54, , 3F
謎之聲: 那就用 register 吧... (咦)
03/16 22:54, 3F
文章代碼(AID): #19laBUGO (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 5 之 6 篇):
2
3
1
6
文章代碼(AID): #19laBUGO (C_and_CPP)