2016年10月7日 星期五

32位元位址移到64位元環境造成死機怎修正

簡易改法
把原本定義成32位元的位址空間 改用intptr_t


Why?
stdint.h 內定義了 intptr_t 這個type
當你需要把pointer 轉型成 integer 的時候 你不確定是32 or 64bit
就可以使用intptr_t


if偵測到是64bit
intptr_t 就是long int  ( 64位元的long int 是64bit, 但32位元的long int是32bit)
否則就是 int   ( 64位元的 int 是32bit, 32位元的int 也是32bit)


此外size_t 定義成unsigned integer
而且是平台相關的
在64bit machine  size_t 是unsigned long
但在32bit machine size_t 是unsigned int


Reference:
http://nickhung0807.blogspot.tw/2014/05/blog-post.html