直接賦值與結構體賦值效率差異

2021-10-02 20:58:17 字數 593 閱讀 1879

一直想直接用結構體,把所有相關的函式都放進去(通過函式指標,然後把函式賦值給函式指標),這樣對外使用的時候就乙個結構體把相關的函式都集合到一起了,很像類一樣,而且方便函式補全,只要結構體名稱,點後面就會出現所有的成員,方便選擇,如果直接是函式,記不清前面開頭還得去尋找。

最近有個小工具就是寫成結構體方式對外呼叫,見:

但是一直擔心結構體賦值是否與直接賦值或者直接呼叫某個函式存在效率差異,就做了乙個測試,直接**可以看到是沒有任何效率差異的,都是3條指令。

都是小使用movs指令,將要賦值的常量拷貝到r0;

然後使用ldr指令,獲取要賦值的資料的指標,並賦值到r1

最後呼叫strb將 r0的資料儲存到r1,可以看到strb指令後面有個常量,上面的是0x8e2,下面的是0,這個是乙個偏移,理論上這個偏移是0還是非零應該不會影響strb指令執行的時間,由於結構體是在內部偏移,跟陣列一樣,第乙個物件的偏移是0,後面肯定都是非零,而常量的偏移都是0.

因此使用結構體並不會降低訪問效率,將同型別的功能函式或者全域性變數放到乙個結構體,便於管理。

c 結構體直接賦值

通過對c語言的學習,相信大家都知道結構體能夠直接賦值,但是如果結構體內部是陣列,那情況又會如何呢?結果是,還是能夠直接賦值,且是深拷貝,就像是c 實現的 過載一樣的效果。以下是一段示例程式,將幫助你理解 include stdio.h struct s array session 1 結構體能夠作為...

陣列直接賦值給結構體

經過幾天的努力 終於把陣列 賦值給結構體,pragma pack push 儲存原對齊並設定新的位元組對齊 pragma pack 1 typedef struct tnettopologyrecord nettopologyrecord,pnettopologyrecord pragma pack...

c語言結構體可以直接賦值

from 下面是乙個例項 include struct foo foo1,foo2 define two structs with three different fields void struct assign void int main 我在ubuntu 13.04下使用gcc 4.7.3 編...