1. 程式人生 > >malloc memset費時麼

malloc memset費時麼

挖坑,最近 無端思考起,這些東西效率,在數值比較大的時候

函式呼叫費時麼。(不是我想思考這些東西,,從前根本從來不考慮的玩意   被逼的,主要是因為 我思考方式就是暴力,不能暴力的努力往暴力上靠,如果還是不能暴力解決那就再換個方法吧)

看到了行內函數。

剛剛在我gcc裡使用了inline 然後

Time.c:(.text+0xde): undefined reference to `judege'
 

然後百度 在你所定義的行內函數前加static就好了,雖然在我本地環境下加了inline,程式費時沒有變化(急需算程式執行時間的東西啊) 但是在別的環境很棒棒啊,很給力。由Time limit exceeded 到時間終於正常一丟丟了,但是使用了inline時間很不穩定的樣子。

 

  • 函式呼叫本身大概是不斷進函式棧然後退出這個棧,所以大概是費時的吧,特別是呼叫幾萬次甚至更多的次數的話。
  • 然後行內函數就是把函式在編譯的時候整個函式體放在被呼叫的位置省去了跳轉 進棧出棧的過程,但是可能會導致程式碼體積過大還有可能因為體積過度執行緩慢。。。。。。
  • malloc 函式工作原理:malloc函式的實質體現在,它有一個將可用的記憶體塊連線為一個長長的列表的所謂空閒連結串列。呼叫malloc函式時,它沿連線表尋找一個大到足以滿足使用者請求所需要的記憶體塊。然後,將該記憶體塊一分為二(一塊的大小與使用者請求的大小相等,另一塊的大小就是剩下的位元組)。接下來,將分配給使用者的那塊記憶體傳給使用者,並將剩下的那塊(如果有的話)返回到連線表上。呼叫free函式時,它將使用者釋放的記憶體塊連線到空閒鏈上。到最後,空閒鏈會被切成很多的小記憶體片段,如果這時使用者申請一個大的記憶體片段,那麼空閒鏈上可能沒有可以滿足使用者要求的片段了。於是,malloc函式請求延時,並開始在空閒鏈上翻箱倒櫃地檢查各記憶體片段,對它們進行整理,將相鄰的小空閒塊合併成較大的記憶體塊。如果無法獲得符合要求的記憶體塊,malloc函式會返回NULL
    指標
    ,因此在呼叫malloc動態申請記憶體塊時,一定要進行返回值的判斷。
    (所以當申請很大的一塊 它費時麼??大概吧 0-0)
  • memset清零字串 與 直接 s[0]='\0'有什麼區別麼  下次用strcpy清零好了

 

程式碼是執行時分配記憶體還是編譯時候分配記憶體?怎麼分配的?沒錯 我要來計算我程式碼理論上得分配多少記憶體(0-0 也是十分無奈 奈何只會暴力方法)

s[i]=t[k]

k++;//s[i]=t[k++]這一種似乎費時一點點 fuck it,,,MDZZ!