PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 電腦硬體討論群組 > 系統組件
帳戶
密碼
 

  回應
 
主題工具
冬之炎陽
Advance Member
 

加入日期: Apr 2005
文章: 431
真正佔記憶體多的是 "程式碼" 的空間, 還是資料的空間???
只要修過計算機或是組合語言等等比較低階的都知道
指令的長度會因為系統位元不同而有所不同
過往16bit 在轉 32bit 的時候也有什麼 32bit 程式太站記憶體云云
也確實32bit程式碼部份會變大啦, 包括一些指標和陣列等等都會
但是載入記憶體中的資料本身往往都遠大於程式碼
除非真的去斤斤計較那些記憶體使用量
否則64bit系統是優於32bit系統的
     
      
舊 2007-09-24, 05:35 PM #21
回應時引用此文章
冬之炎陽離線中  
twu2
Power Member
 

加入日期: Jan 2002
您的住址: Taipei
文章: 664
佔空間當然是指資料的部份啊, 就程式碼來說, 64 與 32 所佔用的空間是很接近的. 因為 x86-64 的 operand 跟 x86 一樣, 只會用到 32bits

至於那一種比較好? 就個人看法來說, 排除有特殊需求的情形下, 如果你的系統的記憶體在 4G 以下, 使用 32 會比 64 合適. 如果你的機器裝到了 6G 以上的記憶體, 用 64 會比 32 合適.
等 2G (或以上) 的 RAM 平價化後, 能輕易裝上超過 4G 的記憶體時, x86-64 才會有足夠的優勢把 x86 丟在後頭吧.
 
__________________

Tommy 碎碎念...
舊 2007-09-24, 07:42 PM #22
回應時引用此文章
twu2離線中  
superhbin
Major Member
 

加入日期: Feb 2003
您的住址: 台中市
文章: 102
引用:
作者twu2
整數在 64bits 上頭本來就是 32bits 上的一倍.
如果程式裡頭用到的變數有很多是整數或指標, 相同的程式, 在 64bits 上頭, 就會多用近一倍的記憶體.

windows 下 int 還是 4 啦...
特別注意的是 windows 下 long 也還是 4 喔.. 跟 linux 很不一樣..

WinXP 32 WinXP x64
char 1 1
short 2 2
int 4 4
long 4 4
long long 8 8
float 4 4
double 8 8
long double 8 8
pointer 4 8

Linux x86 Linux amd64
char 1 1
short 2 2
int 4 4
long 4 8
long long 8 8
float 4 4
double 8 8
long double 12 16
pointer 4 8
舊 2007-09-26, 11:48 AM #23
回應時引用此文章
superhbin離線中  
kyrusp
Major Member
 

加入日期: Feb 2004
您的住址: 高雄市
文章: 108
哇靠, 如果不知情的把 Linux AMD64 下開發的 GTK+ 程式拿到 WinXP X64 recompile & run, 會不會產生 overflow ? 同樣都是 gcc ?
__________________
寒山問拾得曰:「世間謗我、欺我、辱我、笑我、賤我、騙我、如何處治乎?」
拾得云:「只是忍他、讓他、由他、避他、耐他、敬他、不要理他,再待幾年,你且看他。」

高雄台南縣市的照過來: YES!專業網路工作室
Yes論壇註冊
舊 2007-09-26, 07:17 PM #24
回應時引用此文章
kyrusp離線中  
冬之炎陽
Advance Member
 

加入日期: Apr 2005
文章: 431
引用:
作者kyrusp
哇靠, 如果不知情的把 Linux AMD64 下開發的 GTK+ 程式拿到 WinXP X64 recompile & run, 會不會產生 overflow ? 同樣都是 gcc ?

除非 windows 版 gcc 有作特別處理
否則 overflow 是一定會發生的
我沒試過, 你可以試看看, 再告訴大家
舊 2007-09-26, 10:20 PM #25
回應時引用此文章
冬之炎陽離線中  
superhbin
Major Member
 

加入日期: Feb 2003
您的住址: 台中市
文章: 102
引用:
作者kyrusp
哇靠, 如果不知情的把 Linux AMD64 下開發的 GTK+ 程式拿到 WinXP X64 recompile & run, 會不會產生 overflow ? 同樣都是 gcc ?

是指哪部份可能會 overflow 呢?
不是已經 recompile 了. 我想的到的只有讀到 file data .而 data 讀進來時採用了 long 之類的..在 linux 上佔 8bytes .. windows 上佔 4bytes .
而且直接把 linux 上的這個 file data 拿來 windows 上面用..
舊 2007-09-27, 03:25 AM #26
回應時引用此文章
superhbin離線中  
kyrusp
Major Member
 

加入日期: Feb 2004
您的住址: 高雄市
文章: 108
Cool

引用:
作者superhbin
是指哪部份可能會 overflow 呢?
不是已經 recompile 了. 我想的到的只有讀到 file data .而 data 讀進來時採用了 long 之類的..在 linux 上佔 8bytes .. windows 上佔 4bytes .
而且直接把 linux 上的這個 file data 拿來 windows 上面用..


這個嘛....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 ?
__________________
寒山問拾得曰:「世間謗我、欺我、辱我、笑我、賤我、騙我、如何處治乎?」
拾得云:「只是忍他、讓他、由他、避他、耐他、敬他、不要理他,再待幾年,你且看他。」

高雄台南縣市的照過來: YES!專業網路工作室
Yes論壇註冊
舊 2007-09-27, 09:29 AM #27
回應時引用此文章
kyrusp離線中  
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離線中  
futureli
Basic Member
 

加入日期: Feb 2006
文章: 20
引用:
作者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 ?


嗯! 這段話其實不完全正確喔...其實在 WinXP x64 和 Linux x64 的 long 一個是4bytes,
一個是 8bytes。關鍵不是在作業系統,而是在編譯器...也就是說...在 WinXP x64 裡用
VC 系列的 x64 編譯器 long 才是 4 bytes, 如果你在 WinXP x64 裡用 x64 的 gcc (
如果你找的到的話^^),那 long 就會是 8 bytes 而不是 4 bytes!

所以如果在 porting 時要是都用 gcc 的話,這問題就不會發生了^^。
舊 2007-09-27, 05:27 PM #29
回應時引用此文章
futureli離線中  
superhbin
Major Member
 

加入日期: Feb 2003
您的住址: 台中市
文章: 102
引用:
作者futureli
嗯! 這段話其實不完全正確喔...其實在 WinXP x64 和 Linux x64 的 long 一個是4bytes,
一個是 8bytes。關鍵不是在作業系統,而是在編譯器...也就是說...在 WinXP x64 裡用
VC 系列的 x64 編譯器 long 才是 4 bytes, 如果你在 WinXP x64 裡用 x64 的 gcc (
如果你找的到的話^^),那 long 就會是 8 bytes 而不是 4 bytes!

所以如果在 porting 時要是都用 gcc 的話,這問題就不會發生了^^。

您這種說法是錯的.就算你在 Windows x64 上用 gcc ..
long 一樣是 4 bytes ..
您用 google 查查什麼叫做 LLP , LP ,自己也可以實驗看看就知道了..
---附上一段說明--
64位平臺上的編譯器對int尺寸有3種處理方式
1. ILP : int, long, 和 pointer 都是 64bit。
2. LP : int 是 32bit,long 和 pointer都是 64bit。
3. LLP: int 和 long 都是 32bit,pointer 和 long long 是 64bit。

VC 遵循 LLP 模式。大部分平臺上的GCC都使用 LP 模式,但是Windows平臺上的GCC(MinGW)遵循 VC,使用LLP。
---

此文章於 2007-09-27 05:52 PM 被 superhbin 編輯.
舊 2007-09-27, 05:50 PM #30
回應時引用此文章
superhbin離線中  


    回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是04:38 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2025。