2013-09-30 35 views
1

我在這裏讀取Benefit of using short instead of int in for... loop它在循環計數器中使用short而不是純粹的int,因爲在大多數體系結構中short將佔用相同數量的內存空間INT。這使我認爲短整數實際上沒有用,因爲它們不會導致人們可能期望的結果,即節省內存。但是,在生產代碼中,我經常會看到短整數用作函數參數。例如,當我使用ack-grep瀏覽coreboot(coreboot.org)時,發現很多功能不足。我意識到coreboot代碼是相當低級的,但我想知道在x86架構上使用C而不是int的優點是什麼(如果有的話)?我應該什麼時候使用它?定義接受short int而不是int的函數的好處

+3

使用'short'的最大好處是當它們被用於聚合時 - 在短IOW數組中 - 因爲該數組佔用int數組的一半空間。另一個可能的好處是,如果函數被定義爲「short」,那麼您知道該值將在-32768 .. + 32767的範圍內(在具有2的補碼整數和16位的「short」的系統上,是大多數系統),這可能會簡化您在函數內部的驗證過程。否則,除非你匹配某種外部規範,否則'short'類型的變量沒有多大幫助。 –

+0

@JonathanLeffler爲什麼不做出這個答案? – ouah

+0

通過「驗證過程」 - 你的意思是檢查溢出?短怎麼會更容易? – user1042840

回答

1

某些功能是指short和其他int

如果一個人想指望在一個short一個集將使用

int CountBits_short(short x); 

的所有位,如果有人想算在int一個集將使用

int CountBits_int(int x); 

還有就是所有位這不是性能問題,只是功能上的差異。


@JonathanLeffler到OP金額高達評論爲short有用原因,在他們可能會佔用較少的空間。


其他

其他的想法:

在哪裏sizeof(int) == sizeof(short)沒有性能優勢的平臺。
否則我們知道sizeof(int) > sizeof(short)

編譯器可能會爲以下內容創建類似的入口/出口代碼,並且性能沒有差異。

void foo_s(short bar); 
void foo_i(int bar); 

在傳遞指針如在

void foo_s(short *bar); 
void foo_i(int *bar); 

sizeof(bar)是相同的,因爲它是一個地址,在擴充通過再次沒有益處。

帶有數組中

void foo_s(short bar[]); 
void foo_i(int bar[]); 

bar變成第一元素的地址,再次具有相同的尺寸,因爲它是一個地址,在擴充通過再次沒有益處。可能需要的使用short名義上認爲在各種量的代碼爲比int略差功能

性能,以促進/ short和處理器的優選int之間降級。根據定義,int * 1是處理器名義上優選的整數大小。

當然,任何性能問題都需要進行性能分析才能驗證,但要點是short用於節省性能潛在標稱成本的空間。

* 1仍然在尋找spec def,所以現在這是我的看法。

2

當它們在聚合—正在主要用於short IOW的陣列,以利用short最大的好處來了,或者可能作爲結構‐的成員的short陣列通常佔用的陣列的一半的空間int具有相同數量的條目。

另一個可能的好處是,如果函數被定義爲採用short,則知道該值將在-32768 .. + 32767範圍內(在具有2的補碼整數和16位short的系統上),其中是大多數系統),這可能會簡化您在函數內部的驗證過程。如果通過的類型是int而不是short,但有效值的範圍是-32788 .. + 32767,那麼您必須驗證傳入的值是否在範圍內(假設sizeof(int) > sizeof(short),這不是保證但是是典型的)。

否則,類型short的變量不是很多的幫助,除非你匹配某種外部規格。

+0

+1不是說sizeof(int)總是> sizeof(short)。今天的嵌入式系統在經常是相同的情況下是顯着的用途。 – chux

相關問題