我收到错误: mlockall 失败:调用函数 mlockall() 时无法分配内存:
if(mlockall(MCL_CURRENT|MCL_FUTURE) == -1) {
printf("mlockall failed: %m\n");
exit(-2);
}
Run Code Online (Sandbox Code Playgroud)
使用的IDE:Eclipse操作系统:Ubuntu 16.04实时扩展使用:4.11.12 rt-15(抢占补丁)注意:我正在尝试实时进行UDP连接(使用intel i210以太网控制器)。
当我在 Eclipse 中调试相同的内容时,显示的是:
在“/build/glibc-bfm8X4/glibc-2.23/misc/../sysdeps/unix/syscall-template.S”处找不到源文件找到该文件或编辑源查找路径以包含其位置。
怎么解决这个问题呢?
小智 7
正如man 2 mlockall所解释的那样,您似乎没有权限锁定您尝试锁定的内存量。您可以调整该限制,或者尝试以 root 身份运行您的程序,例如通过sudo. 除了查明限制是否确实是问题所在之外,我不建议执行后者,因此这里介绍了如何在 Kubuntu 上调整 bash 的限制 - 它在您的发行版上可能会有不同的工作方式。
首先,让我们看看你的极限是多少:
\n$ ulimit -a | grep locked\nmax locked memory (kbytes, -l) 64\nRun Code Online (Sandbox Code Playgroud)\n64 KB 并不算多!为此,有一个简写,\xc2\xa0too:
\n$ ulimit -l\n64\nRun Code Online (Sandbox Code Playgroud)\n您很可能无法轻松调整限制:
\n$ ulimit -l 1000000\nbash: ulimit: max locked memory: cannot modify limit: Operation not permitted\nRun Code Online (Sandbox Code Playgroud)\n即使是这样,它也不会在 shell 调用、重新启动等过程中持续存在。所以我们需要一种不同的方法。
\n/etc/security/limits.conf来救援!这是用户会话启动时读取限制默认值的文件 - 请参阅man 5 limits.conf。
添加以下行(nobss是我的用户名,显然你应该使用你的用户名)
nobss - memlock 1000000\nRun Code Online (Sandbox Code Playgroud)\n将该文件的硬限制和软限制设置为 1000000 KB。注销并登录,然后查看\xc3\xa0:
\n$ ulimit -l\n1000000\nRun Code Online (Sandbox Code Playgroud)\n这样更好。除非你的程序使用大量内存,否则这个限制应该可以——事实上,在大多数情况下它已经足够了。
\n| 归档时间: |
|
| 查看次数: |
6788 次 |
| 最近记录: |