2013-05-29 40 views
1

我正在爲我的android設備編寫一個應用程序。我正在執行一些本地開發。我正在使用android-ndk-r8d/platforms/android-9。 所以現在在我的C代碼中,我聲明瞭int j=2; 但是有多少字節是j,它由什麼決定?我的android設備的linux內核還是arm芯片?據我所知,對於相應的彙編代碼是什麼實際上決定了一個整數有多少位

.data 
j: .word 2 

但是,這並不讓多少空間這個j將佔據。

+1

可能重複的[在C型尺寸/ C++](http://stackoverflow.com/questions/11600536/size-of-types-in-cc) –

+0

它是由語言,C確定或彙編等,特別是編譯器/彙編器(並由工具作者選擇)。它通常與通用寄存器大小相匹配,但並非總是如此。並且不必從一個編譯器到另一個編譯器或一個編譯器匹配到彙編器,也不必從任何東西到任何一個版本。完全取決於工具作者。 –

回答

1
  1. 體系結構和工具鏈定義類型的大小,所以是的,它部分是ARM,部分是你用來編譯的編譯器。通常在ARM上,這意味着32位的int類型。

  2. 彙編關鍵字將在彙編器文檔中描述,它會告訴您該類型有多大。通常,.word是ARM的32位類型。的

+2

不,它完全是編譯器,而不是架構。當然,通常編譯器配置的靈感來自架構,以方便和高效,但實際上它可以完全忽略它提供的編程模型,只要後端以實際硬件爲目標即可。然而,像指針這樣的東西的大小需要與正在使用的尋址模式的大小相匹配,如果內存的程序員視圖要與執行模式匹配的話。 –

+0

是的,的確如此。正如你所說,實際上,架構往往適用於特定的實施選擇。 –

+0

@ChrisStratton從理論上講,沒有什麼必須是相同的。將* java *編譯爲字節碼。但是,大多數編譯器力求高效。 Ergo,他們會想要匹配底層硬件。所以,我認爲*理論*和*練習*可能不同。第二,編譯器經常努力遵守* ABI *,並且這是由體系結構通過效率強制規定的。 –

相關問題