通常編譯器編譯乙個引用字串的指令是使用指標來實現的.
字元」/0」
表示字元轉的結尾(這是c
語言,delphi
是在字串起始位址前新增了乙個表示字串實際長度的數值標值)
char *a=;
在記憶體中*a
實際存放的資料是41h 41h 41h 41h 00h
int main() ; char *b=; printf("%s%s/n",a,b); return 0; }
反彙編**如下:
int main() ; 012413be mov dword ptr [a],offset string "aaaa" (124574ch) ;字串的位址存放在a中 char *b=; 012413c5 mov dword ptr [b],offset string "bbbb" (1245744h) ;字串的位址存放在b中 printf("%s%s/n",a,b); 012413cc mov esi,esp ;esi指向當前堆疊指標 012413ce mov eax,dword ptr [b] ;字串」bbbb」的指標存放到eax中 012413d1 push eax ;按照cdecl呼叫約定,函式引數從右往左壓入棧 012413d2 mov ecx,dword ptr [a] ;字串」aaaa」的指標存放到ecx中 012413d5 push ecx ;ecx入棧 012413d6 push offset string "%s%s/n" (124573ch) ;字串」 "%s%s/n」d的位址入棧 012413db call dword ptr [__imp__printf (12482bch)] ;呼叫printf函式 012413e1 add esp,0ch ;呼叫者清理堆疊,之前壓入了3個4位元組的引數,所以現在要從堆疊彈出3*4=0ch位元組 012413e4 cmp esi,esp ;比較esi是否等於esp 012413e6 call @ilt+310(__rtc_checkesp) (124113bh) ;呼叫_checkesp檢測esp是否恢復正常 return 0; 012413eb xor eax,eax ;eax清0 } 012413ed pop edi ;恢復edi 012413ee pop esi 012413ef pop ebx 012413f0 add esp,0d8h ;清理堆疊 012413f6 cmp ebp,esp ;比較ebp是否等於esp 012413f8 call @ilt+310(__rtc_checkesp) (124113bh) 012413fd mov esp,ebp ;恢復esp 012413ff pop ebp ;恢復ebp 01241400 ret ;函式返回
字串 Intern 機制
字串在 python 中是最簡單也是最常用的資料型別之一,在 cpython 中字串的實現原理使用了一種叫做 intern 字串駐留 的技術來提高字串效率。究竟什麼是 intern 機制,這種機制又是通過什麼方式來提高字串效率的呢?希望這篇文章能夠拋磚引玉。先來看一段 s3 hello s4 hel...
replace 實現字串替換 字串
字串是 不可改變 的,我們通過可以獲取字串指定位置的字元,但不能使用更改指定位置的字元,一旦更改,就會報錯。a abcedfghijklmnopqrstuvwxyz a 3 a traceback most recent call last file line 1,in a 3 a typeerro...
Python中字串的intern機制
intern機制 字串型別作為python中最常用的資料型別之一,python直譯器為了提高字串使用的效率和使用效能,做了很多優化,例如 python直譯器中使用了 intern 字串駐留 的技術來提高字串效率,什麼是intern機制?即值同樣的字串物件僅僅會儲存乙份,放在乙個字串儲蓄池中,是共用的...