2012-06-12 103 views
3

我目前正試圖限制進程的內存資源。在此之前,我準備rlimit64結構調用getrlimit64。當編譯如下代碼rlimit64整數溢出

rlimit64 as_limit; 
    if (getrlimit64(RLIMIT_AS, &as_limit) == 0) 
    { 
     std::cerr << as_limit.rlim_cur << std::endl; 
     std::cerr << as_limit.rlim_max << std::endl; 

     as_limit.rlim_cur = 0x040000000 * 16; 

     std::cerr << as_limit.rlim_cur << std::endl; 
     std::cerr << as_limit.rlim_max << std::endl; 
    } 

我得到一個關於與as_limit.rlim_cur的分配新建分配FY行整數溢出警告。 Hovever,作爲我得到的輸出:

18446744073709551615 
    18446744073709551615 
    0 
    18446744073709551615 

這怎麼可能?

回答

2

十六進制文字被解釋爲int。

嘗試使用:

0x040000000LL * 16; 

使編譯器將文字作爲一個很長很長。由於長文字(LL後綴)是C99,所以你可能更適合投射到任何類型的結構成員(儘管我會想象任何最近的編譯器都會支持LL-gcc)一樣)。例如,你可以投入很長時間。