2006/07/23

Year 2038 Problem

在 C 語言裡面,時間是以一個有號的整數儲存。若是呼叫 time() 函式,則會回傳一個整數,這個整數代表:從格林威治時間 1900 年 1 月 1 日 0 時 0 分 0 秒到現在時間的秒數。

標準的C語言編譯器中,整數 int 的大小為 232,因為是有號數,所以整數的範圍是從 -231 到 231-1。

距離1900年越久,time()函數所傳回的秒數也會越大,當超過 231-1時,就會產生溢位(over flow),此時計數器就會發生問題。而 231-1 為 2147483647,正是到 2038 年 1 月 19 日的秒數,所以那些以C語言為主撰寫出來的作業系統,如:Unix,都會掛彩。

參考資料:
http://en.wikipedia.org/wiki/Year_2038_problem
http://computer.howstuffworks.com/question75.htm

沒有留言:

張貼留言