瀏覽單個文章
superhbin
Major Member
 

加入日期: Feb 2003
您的住址: 台中市
文章: 102
引用:
作者kyrusp
這個嘛....data 到哪邊都是一樣, 我說的是在 memory 中的運作, 想想看, 在 Linux AMD64 下, 一個 long 是 int64, 但是在 WinXP X64 卻是 int32, 從 Linux 底下完全不改移植到 Windows XP X64, 一個不小心就會 overflow 了

拿個比方來說好了, 如果你寫一個加工業的管理系統, 裡面需要算物料的體積, 長寬高, 以 mm 為單位, 你覺得會不會 ? 連正常在寫, 不考慮 Windows or Linux 底下的環境, 長寬高都要用到 int64 了(這樣相乘起來才不會 overflow), 在 Linux AMD64 下很正常就用了 long, 但是移植到 WinXP X64 , 裡面的 long 居然是 int32, 試想, 這樣會不會 overflow ?

了解您的意思了..謝謝.
突然想到 java 怎解決這問題的呢?
看了一下不同平台的 jni_md.h

windows 32bits && 64bits
typedef __int64 jlong;

linux 32bits && 64bits
#ifdef _LP64 /* 64-bit Solaris */
typedef long jlong;
#else
typedef long long jlong;

AIX 32bits && 64bits
typedef int64_t jlong; /*ibm@13822*/

用 define 的方式讓 size(jlong) 都是 8
舊 2007-09-27, 09:37 AM #28
回應時引用此文章
superhbin離線中