使用C和彙編混合實現strcpy 歡迎扔磚

2021-09-30 03:07:31 字數 1804 閱讀 1198

我們經常使用的strcpy,相信很多人都知道它的實現了,那麼有沒有想過自己寫乙個strcpy呢?在c下面,據說這是很經典的實現方法哦,簡潔而乾淨:

char * strcopy2(char * szdst, const char * szsrc)

不過由於使用的c語言的實現,那麼就不可避免會造成c到彙編時的那麼框架**,也就是push ebp; mov ebp, esp; mov esp, ebp; pop ebp等等儲存和恢復指標和暫存器等等的操作。

實際的crt中的strcpy也就是用彙編實現的,那我們就不能自己來乙個自己的strcpy麼?當然也用彙編寫,我還給它穿乙個c的皮:)

__declspec(naked) char * strcopy(char * szdst, const char * szsrc)

}

使用__declspec(naked)預編譯指令,那麼

c函式將不會產生那些討厭的什麼

push ebp

等等的框架指令:俺的函式很小,俺只有有限的幾個暫存器,幹什麼要先儲存那麼多,然後又恢復呢?產生一大堆的沒用操作,所以,俺就按照上面的方式幹了哦:)

不過實際測試的效果顯示,使用

crt庫中的

strcpy

函式的效率還是比較高,為什麼我這裡的

strcopy

還不如crt

庫中的strcpy

效率高呢?什麼原因,請大家幫忙分析一下啦!

幾種情況的效率測試: 一

. 使用

crt庫中的

strcpy函式

int main(int argc, char* ar**)

printf("end time: %08d/n", gettickcount());

return 0;

}

結果為:

start time: 29515000

endtime: 29515120

耗時:120ms

二. 使用上面的strcopy函式,也就是我自己的彙編實現:

更改如上測試程式中的strcpy函式為我自己實現strcopy函式,結果為:

start time: 29540947

endtime: 29541147

耗時:200ms

三. 使用上面的純c編寫的strcopy2函式:

更改如上測試程式中的strcpy函式為已經定義的strcopy2函式,結果為:

start time: 29727525

endtime: 29728327

耗時:805ms

從時間消耗的時間上來看,顯然是crt庫中strcpy表現最佳,而我的實現其次,表現最差的就是使用純c編寫的strcopy2了。

沒有看crt庫中的strcpy的實現,哪位看過的可以先給我說說是怎麼回事,為什麼我的strcopy效率會比較底呢?謝謝了!

C和彙編混合程式設計

c和彙編混合程式設計 嵌入式裡面用到彙編的地方 開機時的硬體系統的初始化,包括cpu的狀態設定,中斷使能主頻設定,以及ram控制引數以及初始化一些中斷處理方面涉及一些彙編。c中內嵌彙編大多數為arm和thumb指令,其中注意 1 不能直接向pc賦值,程式跳轉用b或者bl指令 2 使用物理暫存器不能使...

模擬實現strcpy函式,不使用strcpy庫函式

define crt secure no warnings include include include char my strcpy char dest,const char src dest為目標字串,src為源字串。用const可以防止子函式改變源字串。return ret 返回目標串的位址...

c和c 混合使用

我們編寫 經常需要c和c 混合使用,為了使 c 和 c 保持互相相容的過程呼叫介面,需要,為了簡化,從而定義了兩個巨集方面我們使用 1.在 c 裡加上 extern c 作為符號宣告的一部分。2.begin decls 和 end decls 在c語言 中標頭檔案中,充斥著下面的 片段 begin ...