gpt4 book ai didi

linux - Linux gcc 是否支持 coreleft 功能?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:38 26 4
gpt4 key购买 nike

我在文章中读到http://www.ousob.com/ng/borcpp/ng916c4.php关于通过调用 coreleft() 获取未使用的 brk 内存。但看起来这在 Linux 上不起作用。而且文件 alloc.h 不存在。我的问题是 alloc.h 是 Linux 的函数族标准吗?如果没有,Linux 上是否有类似 coreleft 功能的替代方案?谢谢。

最佳答案

您可能想要测量内存使用情况,这在 Linux 上非常模糊。参见 this & that更多。你会想要使用 /proc/伪文件系统,参见 proc(5) .请记住 processes使用 virtual memory .另见 http://www.linuxatemyram.com/

询问剩余多少内存(或可以分配多少内存,例如 system callsmmap(2) ...)没有任何意义,因为某些其他进程可能会释放内存资源,这稍后将可用于您的过程。因此不可能有任何可靠 coreleft函数 - 测量可用的堆内存,例如以便将来调用 malloc - 在 Linux(或 POSIX)上。两者 mmap & malloc可能会失败(你应该经常检查)。

您可以在进程上限制许多资源(包括 virtual memoryaddress space ),请参阅 setrlimit(2)和 bash shell ulimit内置。

sbrk syscall 在 Linux 上几乎被弃用(并且不再使用)。您将使用 mmap 获得新的虚拟内存段(然后您使用 munmap 发布它)。 C standard library工具 malloc(3) (来自 <stdlib.h> )通过调用 mmap适本地;它通常会尝试重用以前的 free -d 内存区域。在 Linux 上使用 GNU glibc ,另见 malloc_info(3) , mallinfo(3) , malloc_stats(3) .您可能会研究 free software 的源代码标准 C 库,如 GNU glibcmusl-libc了解更多关于他们的信息。

<alloc.h> header 是非标准的,在大多数 Linux 或 POSIX 系统上不存在。

如果您需要保留一些地址空间而不消耗内存(即交换区)考虑MAP_NORESERVE mmap 的选项.参见例如this .

在 POSIX 系统(如 Linux)上的 C 中,通常的习惯是使用 malloc (或相关的 calloc )函数,并处理内存不足的情况(这在实践中不太可能发生,除非在负载非常大的系统上或设置了强大的小限制时),可能通过退出并显示错误消息:

 size_t siz = some_size();
void* p = malloc(siz);
if (!p) { perror("malloc"); exit(EXIT_FAILURE); };

另见 this answer (建议 Boehm 的 GC)。

我建议你阅读Advanced Linux Programming

关于linux - Linux gcc 是否支持 coreleft 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32109168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com