[英]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字節長?
如果需要特定於字節長度的數據類型,請從cstdint
查看int32_t
和uint32_t
。
這些類型保證為給定的長度(帶符號和無符號)。
感謝大家。 問題是我們的代碼是本地的/特定的,我們假設指針的長度始終為4個字節。 當我們取消引用它們時,我們將它們強制轉換為4字節變量,並且失去了精度。 這導致崩潰。 由於這是許多人多年來開發的大型代碼庫,因此有許多基於這些假設的遺留代碼,因此我不得不遍歷所有指針並進行修改。 最后,我們已成功將代碼移植到64位模式。
看看這個-C ++中的Size保證 。 內置類型(int,long等)滿足一些最小大小,但在每個系統上不必為4個字節。 您可以使用固定寬度類型(如dwcanillas的評論中所述)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.