1. 程式人生 > >程序的機器級表示(三) -- CSAPP閱讀

程序的機器級表示(三) -- CSAPP閱讀

排列 程序 cpu 計算機系統 獲取 padding 整型 32位 一個

數據對齊:

許多計算機系統對基本數據類型合法地址做出了一些限制,要求某種類型對象的地址必須是某個值K(2,4,8)的倍數。

我的理解是:從棧幀地址開始數,每個字段的地址偏移量必須是字段本身長度的K倍。如果偏移量不滿足則將該字段向後移動幾個字節以滿足條件。即當字段順序為(char,double)時,棧中排列如下:

基本類型

char

double

長度

一個字節

七個未使用字節

八個字節

偏移量

0

8

為了最小的減少內存浪費,應按基本數據類型字段大小,從大到小排列。

指針:

形如 int *p; int q = 1; p = &a;

P為指針,存儲著整型 a 的內存地址,p 本身大小只與CPU有關,32位為4字節,64位為8字節。*P表示實際指向的數據值,&a 表示獲取字段 a 在內存中的物理存儲位置。

程序的機器級表示(三) -- CSAPP閱讀