3

我目前正在尝试限制进程的内存资源。在这样做之前,我准备了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。悬停,作为我得到的输出:

    18446744073709551615
    18446744073709551615
    0
    18446744073709551615 

这怎么可能?

4

1 回答 1

2

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

尝试使用:

0x040000000LL * 16;

以便编译器将文字视为 long long。

由于 long long 文字(LL 后缀)是 C99,因此您最好转换为 struct 成员的任何类型(尽管我想任何最近的编译器都会支持 LL——gcc 肯定会支持)。例如,您可以转换为 long long。

于 2012-06-12T23:45:41.693 回答