1
英特爾指南中提到「邏輯地址由16位選擇器和32位偏移量組成」。如果用C使用現在的小程序:分段中的邏輯地址
printf("The address of a=%x", &a);
的輸出是:0xbffa8343
上述地址是32位,所以怎麼能分成選擇器(16位)和偏移量(32位)?
英特爾指南中提到「邏輯地址由16位選擇器和32位偏移量組成」。如果用C使用現在的小程序:分段中的邏輯地址
printf("The address of a=%x", &a);
的輸出是:0xbffa8343
上述地址是32位,所以怎麼能分成選擇器(16位)和偏移量(32位)?
這種情況下的32位地址是與指南的32位偏移量。實際上,「16位選擇器」通常不包含C代碼,實際上通常隱含在彙編代碼中。 (在許多現代操作系統中,除了對線程本地存儲的內部訪問之外,甚至不使用分段。大多數情況下,默認分段設置爲指向全部4GB虛擬內存。)
您可能發現有用的方法是搜索網頁,以便很好地介紹細分寄存器以及今天如何使用細分。
謝謝,我也有信息:http://stackoverflow.com/questions/3029064/segmentation-in-linux-segmentation-paging-are-redundant – Albert 2012-02-20 08:50:59