2012-04-05 50 views
0

我有一個C程序,我知道在32位系統上工作。在64位系統上(至少是我的)它工作到一個點然後停止。閱讀一些論壇的程序可能不是64位安全的?我認爲它與32位和64位系統之間的數據類型差異有關。不同位大小的操作系統上的數據類型有區別嗎?

是一個char上都一樣嗎?那麼intlong或它們的unsigned變體呢?有沒有其他方式的32位程序不會是64位安全的?如果我想驗證應用程序是64位安全的,我應該採取哪些步驟?用C

+1

的明顯的是,一個指針是不同的大小。 – 2012-04-05 04:11:52

+0

@MikeKwan所以'char * data'會不同於兩者?我怎樣才能使它在32位的64位上工作。或者最終這件事情應該如何? – Justin808 2012-04-05 04:16:30

回答

1

常規數據類型具有值的最小距離,而不是特定的位寬度。例如,short必須能夠表示至少-32767到32767(含)。

所以,是的,如果你的代碼依賴於價值纏繞在32768,這是不太可能表現良好,如果短期是一些大鳴喇叭128位的龐然大物。

如果您想要特定寬度的數據類型,請查看stdint.h,查看諸如int64_t之類的內容。有各種各樣的選擇,具體寬度,「至少」寬度,等等。與「常規」整數類型不同,它們還要求二進制補碼:

  • 具有一定確切寬度的整數類型;
  • 具有至少某些指定寬度的整數類型;
  • 具有至少某些指定寬度的最快整數類型;
  • 整數類型足夠寬以保持對象的指針;
  • 具有最大寬度的整數類型。

例如,來自C11 7.20.1.1 Exact-width integer types

typedef名intN_t表示具有寬度N有符號整數型,無填充 比特,一個二的補碼錶示法。因此,int8_t表示寬度恰好爲8位的整數類型的帶符號的 。

假如你遵守規則(比如不把指針指向整數),你的代碼應該在任何實現和任何體系結構上編譯和運行。

如果沒有,你就得開始調試,然後發佈,似乎就專門爲這樣的事情一個論壇網站是造成問題的詳細信息和代碼。現在我在哪裏見過最近的一個? :-)

相關問題