我在這裏讀取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的函數的好處
回答
某些功能是指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,所以現在這是我的看法。
當它們在聚合—正在主要用於short
IOW的陣列,以利用short
最大的好處來了,或者可能作爲結構‐的成員的short
陣列通常佔用的陣列的一半的空間int
具有相同數量的條目。
另一個可能的好處是,如果函數被定義爲採用short
,則知道該值將在-32768 .. + 32767範圍內(在具有2的補碼整數和16位short
的系統上),其中是大多數系統),這可能會簡化您在函數內部的驗證過程。如果通過的類型是int
而不是short
,但有效值的範圍是-32788 .. + 32767,那麼您必須驗證傳入的值是否在範圍內(假設sizeof(int) > sizeof(short)
,這不是保證但是是典型的)。
否則,類型short
的變量不是很多的幫助,除非你匹配某種外部規格。
+1不是說sizeof(int)總是> sizeof(short)。今天的嵌入式系統在經常是相同的情況下是顯着的用途。 – chux
- 1. 從Int到Int映射從Short到Int定義的Scala`+`functor?
- 2. c# - 是SHORT數據類型還是INT?
- 3. 是unsigned short + int類型的實現定義?
- 4. 函數返回字符[]而不是int
- 5. 接受Flask url中的ints列表,而不是一個int
- 6. 爲主鍵列使用mediumint而不是int的好處?
- 7. std :: vector構造函數 - 爲什麼int而不是int *?
- 8. 爲什麼InputStream read()返回一個int而不是一個short?
- 9. 的Java:使用短而不是INT
- 10. WPF文本框接受INT但不是NULLABLE INT?
- 11. TextBox只接受int
- 12. 使用指向int或short int的成員創建struct數組?
- 13. 更改LinkedList接受對象而不是Int?
- 14. 爲什麼fgets接受int而不是size_t?
- 15. 函數指針不是INT
- 16. 應該int * p長int * p而不是?
- 17. int或char枚舉int,而不是ASCII
- 18. R6010:我可以將一個int&傳遞給一個接受int的函數嗎?
- 19. 對於限制<100的循環,使用'short'而不是'int'是明智嗎?
- 20. 用Short和int重載
- 21. 將short int []轉換爲char *
- 22. 將unsigned short *轉換爲int *
- 23. java將int轉換爲short
- 24. 爲什麼int * []衰減爲int **而不是int [] []?
- 25. 自動myFunc() - > int和int的區別或好處myFunc()
- 26. OCaml的 - 給類型的函數(INT - > INT) - > INT
- 27. 爲什麼我的函數返回一個Unit而不是Int?
- 28. Int而不是Long,bug?
- 29. 構造函數String(int,int,char [])在哪裏定義?
- 30. 「構造函數Window(int,int,String,Game)未定義」
使用'short'的最大好處是當它們被用於聚合時 - 在短IOW數組中 - 因爲該數組佔用int數組的一半空間。另一個可能的好處是,如果函數被定義爲「short」,那麼您知道該值將在-32768 .. + 32767的範圍內(在具有2的補碼整數和16位的「short」的系統上,是大多數系統),這可能會簡化您在函數內部的驗證過程。否則,除非你匹配某種外部規範,否則'short'類型的變量沒有多大幫助。 –
@JonathanLeffler爲什麼不做出這個答案? – ouah
通過「驗證過程」 - 你的意思是檢查溢出?短怎麼會更容易? – user1042840