我目前正在尝试限制进程的内存资源。在这样做之前,我准备了调用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
的行的整数溢出的警告。霍维弗,作为输出,我得到:
18446744073709551615
18446744073709551615
0
18446744073709551615
这怎么可能?
十六进制文字被解释为 int。
尝试使用:
0x040000000LL * 16;
以便编译器将文本视为长整型。
由于长文本(LL后缀)是C99,因此最好转换为结构成员的任何类型(尽管我想任何最近的编译器都会支持LL-gcc肯定支持)。 例如,您可以投射到长长。