2013-10-04 56 views
-1

據我瞭解一個字節由8位或字節的,它有一個地址分配給它我的問題是,如果我要了2個字我收到那麼4個不同的地址,還是我得到一個地址對於整個Word?任何解釋將不勝感激。感謝多存儲器地址

+0

你在問一個棘手的問題。一個詞是一組字符。你有一個指向開始的地址,但是每個字符都有它自己的地址,但是指向char數組的指針仍然指向位置0。 – Chemistpp

+0

你應該更具體,通過顯示你的代碼。 ''如果我要求2個單詞「''是什麼意思? –

+0

C和C++以'char's不是字節計數。取決於您的平臺,「char」可以是7,8,9,16位或其他任何內容。 – syam

回答

1

如果做了分配,然後作爲一個整體有一個地址的分配,以及每個字節中它也有一個地址。

在分配的第一個字節的地址是等於分配的地址,其餘字節具有連續地址從那裏向上計數。

「進行分配」包括全局變量,自動變量,new,malloc,爲特定用途分配內存的任何內容。要使用技術術語,C和C++中的每個對象都是一系列具有連續地址的字節。

如果您的系統使用虛擬內存(幾乎所有內容都是這樣),則地址在虛擬地址空間中連續。它們不需要在物理內存中是連續的,但是虛擬內存的全部重點是你(程序員)可以忽略物理內存中的東西。

+0

謝謝你的明確答案。所以如果我想分配一個像這樣的'char s [] =「test」',我會得到一個整個數組的地址,但也會得到s [0],s [1],s [2],s [ [4]'對嗎? –

+0

@LeandroVillagran:是的,'s [0]'...'s [3]'將會有值''t'',''e'',''s'',''t''和' s [4]'將具有值'0'(它是nul終止字符)。你也可以看到'sizeof(s)'是'5'。 –

+0

謝謝你的解釋@Steve Jessop我真的很困惑,但現在我明白了 –

2

通常認爲任何對象或變量的「地址」是該變量中第一個(最低)字節的地址。所以,如果你有一個類型爲std :: uint64_t(8字節)的變量,則指向該變量的指針將是它的第一個字節,而下面的7個地址包含其他7個字節。現在,爲了其中這些字節存儲取決於具體的實現(查找小端與大端架構)。

希望有所幫助。

+0

感謝這加強了@Steve Jessop的答案,我實際上昨天才瞭解到litte和big endian。謝謝Limne –

-1

有錯過如[3],這是「t'.and S [4],它是 '\ 0'

0

在C中,除位字段的所有對象都從一個或多個字節制成:

C 2011(N1570)6.2.6.1表示「除了位字段,對象由一個或多個字節的連續序列組成,它們的數量,順序和編碼是明確指定的,所定義。」

當您訪問由多對象ple字節,例如int(通常),則會爲您訪問該對象的所有字節。

對於天然地由所述處理器的硬件支持的任何物體,也有采取單個地址,但是,從該地址開始多個字節操作加載和存儲指令。例如,有「加載字」指令從一個字節的地址開始加載四個字節。 (關於「單詞」的大小沒有標準;它因計算機體系結構而異。)對於由C實現創建的對象(例如具有多個成員的結構體對象),C實現必須使用多條指令加載和存儲對象的所有部分。