rlimit64整数溢出

时间:2012-06-12 23:43:44

标签: c integer-overflow

我目前正在尝试限制进程的内存资源。在此之前,我准备rlimit64结构调用getrlimit64。编译以下代码时

    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分配的行的整数溢出的警告。 Hovever,作为输出我得到:

    18446744073709551615
    18446744073709551615
    0
    18446744073709551615 

这怎么可能?

1 个答案:

答案 0 :(得分:2)

将十六进制文字解释为int。

尝试使用:

0x040000000LL * 16;

因此编译器将文字视为long long。

由于long long literal(LL后缀)是C99,你可能最好不要使用任何类型的struct成员(尽管我认为任何最近的编译器都会支持LL - gcc肯定会)。例如,你可以施展很长时间。