C++ Tricks 2.2 I386平臺的內存佈局

farseerfc.wordpress.com 導入

2.2 I386平臺的內存佈局

衆所周知,I386是32位體系結構。因此對於絕大多數I386平臺的C++編譯器而言,sizeof(int)=sizeof(long)=sizeof(void*)=4。當然C++標準對此沒有任何保證,我們


C++ Tricks

farseerfc.wordpress.com 導入

C++ Tricks

By  FarseerFc

從今天起,我再將在 LiveSpace QQZone 同時發表一系列文章,暫定名爲“C++Tricks”。

本文旨在記錄和闡述一些本人學習C++時所得的心得、技巧。總體來看,本文涉及的內容是每一個C++程序員都應


C++ Tricks 2.3 I386平臺C函數內部的棧分配

farseerfc.wordpress.com 導入

2.3 I386平臺C函數內部的棧分配

函數使用棧來保存局部變量,傳遞函數參數。進入函數時,函數在棧上爲函數中的變量統一預留棧空間,將esp減去相應字節數。當函數執行流程途徑變量聲明語句時,如


C++ Tricks 2.4 I386平臺C函數調用邊界的棧分配

farseerfc.wordpress.com 導入

2.4 I386平臺C函數調用邊界的棧分配

當調用一個函數時,主調函數將參數以聲明中相反的順序壓棧,然後將當前的代碼執行指針(eip)壓棧,然後跳轉到被調函數的入口點。在被調函數中,通過將ebp加


C++ Tricks 2.5 I386平臺的邊界對齊(Align)

farseerfc.wordpress.com 導入

2.5 I386平臺的邊界對齊(Align)

首先提問,既然I386上sizeof(int)==4、sizeof(char)==1,那麼如下結構(struct)A的sizeof是多少?

struct A{int i;char c;};

答案是sizeof(A)==8……1+5=8?

呵呵


C++ Tricks 2.6 I386平臺C函數的可變參數表(Variable Arguments)

farseerfc.wordpress.com 導入

2.6 I386平臺C函數的可變參數表(Variable Arguments)

基於前文(2.4節)分析,我們可以不通過函數簽名,直接通過指針運算,來得到函數的參數。由於參數的壓棧和彈出操作都由主調函數進行,所以被調函數


C++ Tricks 2.7 I386平臺的其它函數調用模型

farseerfc.wordpress.com 導入

2.7 I386平臺的其它函數調用模型

上文介紹的只是I386平臺上C函數調用的標準模型,被稱作__cdecl。事實上,Microsoft Visual C++編譯器還支持其它一些函數調用模型,所有調用模型名稱皆以雙下劃線開頭

Apple Silicon|Intel

C++ Tricks 2.1 X86概述

farseerfc.wordpress.com 導入

2.1   X86概述

所謂X86體系結構,是指以Intel8086芯片爲首的芯片所沿襲的CPU結構,一些文檔中又被稱作IA32體系結構。包括的芯片有但不限於:Intel8086至80486,奔騰(Pentium)系列處理器1


20070827 網摘 – 民間知識分子

民間知識分子


朋友?敵人?

以一種「有機會成為你朋友」的「中立姿態」,再冷言冷語、摑你兩掌再踩住你上,遭反駁的時候就問「你想多一個朋友還是敵人?」——也許還附送「我是講良心話」的委屈模樣。

見太多了。重要的是,認住這種所謂「朋友」