看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 有點好奇怎麼樣才能寫可攜的程式 但我環境只有vc 以VS 2012 VC來看 x86設定下 我看到size_t的typedef是 #ifdef _WIN64 typedef unsigned __int64 size_t; #else typedef _W64 unsigned int size_t; #endif _W64這個似乎以下面解釋 , 是一個識別用途 http://msdn.microsoft.com/en-us/library/s04b5w00(v=vs.80).aspx 所以在x64的條件下size_t = unsigned __int64 我覺得很疑惑以MSDN這樣描述和以前常常聽到 int, long, or a pointer. 這些size是會跟著平台變得 我可不可以建立觀念說 int 在 64bit環境下 會變 (變成多少 不肯定 也許是8?) 但我自己照著MSDN建立x64環境 sizeof int = 4, long = 4, pointer = 8 好怪 他並不會跟著變....所以上面的觀念是錯誤的嗎??還是看compiler? 而__int64 這種type好像只有VC自己規範的... 所以要寫可攜的程式碼 我可以說 1. 要用無號整數 請用size_t?? (for VC or GCC) 2. 若有號整數 用intptr_t?? (for VC or GCC) 3. 但是又有一個uintptr_t....他跟size_t有語意上的差異嗎? 4. 為啥上面兩個type都有"ptr"這keyword..跟ptr大小相關的int的意思嗎? 5. int32_t這是固定寬度的typedef..整數 , 若上面大觀念沒錯 int 會變動 只有兩種case "變"跟"不變" 那我們是不是程式碼裡面要馬就用 intN_t 和 intptr_t 根本就不該使用int了? 以上許多地方不太了解 請各位指證 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.163.58.205
EdisonX:先說 size_t , 語意上是給 index 或算 array size 用的, 01/15 12:36
EdisonX:其他留給高人指點 (或閒點的時候再回 XD) 01/15 12:37
EdisonX:然後你的問題應該是在,x64時 sizeof(pointer)==8, 自然可 01/15 12:39
EdisonX:配置記憶體範圍會有所不同 void * malloc(size num); 所 01/15 12:39
EdisonX:以自然有種說法,malloc 上限還必須看 size_t 表示範圍. 01/15 12:40
EdisonX:最後 x64 sizeof int,long 給多少真的不一定,部份compiler 01/15 12:42
EdisonX:還是維持和 x64 一樣,所以才有你說的 intN_t 等出現. 01/15 12:43
EdisonX:     ^x86 01/15 12:44
diabloevagto:上下限直接看limits 01/15 15:11