簡體   English   中英

32位和64位Linux機器中4字節類型之間的差異

[英]Difference between 4-byte types in 32-bit and 64-bit Linux machines

我正在將我們的Linux C ++項目從32位移植到64位。

在我們的32位系統中,“ long”為4個字節長。 但是,當我們以64位模式構建項目時,我們注意到“ long”占用了8個字節。 由於我們需要4字節長的類型,因此我們使用了“ int”並確認其確實為4字節長。 我們希望我們的代碼能夠無縫運行。

但是不幸的是,即使在32位模式下的“長”和在64位模式下的“ int”都長4個字節,我們的代碼還是失敗了。

有人可以讓我們知道32位模式下的“長”和64位模式下的“ int”之間是否存在差異(布局或其他方面)? 即使兩個都是4字節長?

  • 機器:Linux x86_64
  • 作業系統:CentOS 6.6
  • gcc:4.9.2

如果需要特定於字節長度的數據類型,請從cstdint查看int32_tuint32_t

這些類型保證為給定的長度(帶符號和無符號)。

感謝大家。 問題是我們的代碼是本地的/特定的,我們假設指針的長度始終為4個字節。 當我們取消引用它們時,我們將它們強制轉換為4字節變量,並且失去了精度。 這導致崩潰。 由於這是許多人多年來開發的大型代碼庫,因此有許多基於這些假設的遺留代碼,因此我不得不遍歷所有指針並進行修改。 最后,我們已成功將代碼移植到64位模式。

看看這個-C ++中的Size保證 內置類型(int,long等)滿足一些最小大小,但在每個系統上不必為4個字節。 您可以使用固定寬度類型(如dwcanillas的評論中所述)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM