2012-02-20 86 views
1

英特爾指南中提到「邏輯地址由16位選擇器和32位偏移量組成」。如果用C使用現在的小程序:分段中的邏輯地址

printf("The address of a=%x", &a); 

的輸出是:0xbffa8343

上述地址是32位,所以怎麼能分成選擇器(16位)和偏移量(32位)?

回答

2

這種情況下的32位地址與指南的32位偏移量。實際上,「16位選擇器」通常不包含C代碼,實際上通常隱含在彙編代碼中。 (在許多現代操作系統中,除了對線程本地存儲的內部訪問之外,甚至不使用分段。大多數情況下,默認分段設置爲指向全部4GB虛擬內存。)

您可能發現有用的方法是搜索網頁,以便很好地介紹細分寄存器以及今天如何使用細分。

+0

謝謝,我也有信息:http://stackoverflow.com/questions/3029064/segmentation-in-linux-segmentation-paging-are-redundant – Albert 2012-02-20 08:50:59