我目前正在尝试限制进程的内存资源。在此之前,我准备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
这怎么可能?
答案 0 :(得分:2)
将十六进制文字解释为int。
尝试使用:
0x040000000LL * 16;
因此编译器将文字视为long long。
由于long long literal(LL后缀)是C99,你可能最好不要使用任何类型的struct成员(尽管我认为任何最近的编译器都会支持LL - gcc肯定会)。例如,你可以施展很长时间。