嗯,我對這種類型的主題很生硬,所以很抱歉,如果我完全不符合事情。我會盡力澄清。CPU如何知道變量的大小以正確讀取它?
在正在讀取命令的內存中,CPU如何知道它必須讀取一個4字節的字符串或一個10字節的字符串來處理該命令?或另一個命令,CPU知道它必須讀取int64的大小才能正確讀取數據以使用它?是存儲在某個地方的大小?可能計算?
嗯,我對這種類型的主題很生硬,所以很抱歉,如果我完全不符合事情。我會盡力澄清。CPU如何知道變量的大小以正確讀取它?
在正在讀取命令的內存中,CPU如何知道它必須讀取一個4字節的字符串或一個10字節的字符串來處理該命令?或另一個命令,CPU知道它必須讀取int64的大小才能正確讀取數據以使用它?是存儲在某個地方的大小?可能計算?
數據大小通常是在指令中編碼,或者是隱式知道的。在例如x87中:
fild word [testdata] ; loads 16 bits
fld dword [testdata] ; loads 32 bits
fld qword [testdata] ; loads 64 bits
fld tword [testdata] ; loads 80 bits
你必須告訴他「你」你的數據長度。
它是你需要分配內存的原因,例如
char test[17];
讓我們來看看字符串的部分答案,這在C一個具有空字符結束一個人的字符串(即以空字節或\0
結束它),因此它的讀取到空一個簡單的工作字節。
對於固定類型的數據(假設爲int
),編譯器會通知CPU它正在處理一個int,因爲編譯器和CPU都將使用相同的體系結構,它們的長度將相同。
編譯器生成能夠正確讀取變量的代碼。 – 2011-12-29 15:30:25
感謝所有 - 在谷歌搜索一段時間後,這一切都變得枯燥!謝謝! – 2012-12-02 15:25:58