C - rlimit64 整数溢出



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

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

    18446744073709551615
    18446744073709551615
    0
    18446744073709551615 

这怎么可能?

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

尝试使用:

0x040000000LL * 16;

以便编译器将文本视为长整型。

由于长文本(LL后缀)是C99,因此最好转换为结构成员的任何类型(尽管我想任何最近的编译器都会支持LL-gcc肯定支持)。 例如,您可以投射到长长。

相关内容

  • 没有找到相关文章

最新更新