小编Arc*_*Arc的帖子

尝试使用 sbrk 减少数据段大小时在 glibc 中中止

在使用 glibc 时,我尝试使用sbrk使用负参数来减少数据段,并发现了一个最奇怪的行为。

\n

我首先使用malloc,然后free使用它,然后使用 减少数据段sbrk,然后malloc再次使用与第一个相同的大小。

\n

问题是,如果malloc大小(两个malloc大小相同)足够小(32k,或八个 4k 页),那么一切都可以正常工作。但是当我增加一点malloc- free-malloc大小(到九个 4k 页)时,我会得到核心转储。更奇怪的是,当我将大小提高malloc到超过mmap阈值(128k)时,我会得到调整中止行为。

\n

C代码:

\n
#define _GNU_SOURCE 1\n#include <stdio.h>\n#include <malloc.h>\n#include <unistd.h>\n\n// set MMAP_ALLOC_SIZE to 8 4k-pages it will work, \n// set it to 9 4k-pages it raises a \'segmentation fault (core dumped)\'\n// set it to 33 4k-pages it raises a \'break adjusted to free malloc space\' …
Run Code Online (Sandbox Code Playgroud)

gcc mmap glibc heap-memory sbrk

-1
推荐指数
1
解决办法
608
查看次数

标签 统计

gcc ×1

glibc ×1

heap-memory ×1

mmap ×1

sbrk ×1