问题标签 [brk]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
178 浏览

linux - 在这种情况下,echo 可能会意外附加 NULL 字符

我正在开发一台迷你机器(MEM:256M),它的操作系统是linux。

我写了一个 bash 脚本,它会在系统启动时执行(执行命令添加到/etc/rc.local)。

在这个脚本中,有一个命令echo "a_long_string" >> /etc/custom_config

a_long_string是一个字符串,长度为 248。

为了测试脚本,我多次重启系统,发现一个问题:

有时,该命令echo "a_long_string" >> /etc/custom_config会附加 248 个 NULL 字符加上a_long_string,这意味着,通常在执行此命令后,我们可以a_long_string在文件末尾找到/etc/custom_config,但有时我确实发现附加的字符串如下所示:

我试图弄清楚发生了什么。长字符串是否echo会在小型 RAM 系统上引起类似的问题?

0 投票
1 回答
35 浏览

linux - 为什么函数 brk() 的参数是 void* 而不是 int 类型?

我正在查看 Linux 指南中函数 int brk() 的文档:

还有一些我不明白的地方:如果 brk() 只将数据段的末尾设置为 addr 指定的值,那么为什么它的参数是 void* 而不是 int 类型?

谢谢您的帮助!

0 投票
1 回答
59 浏览

c - 为什么 brk(void *end_data_segment) 的参数不向上舍入到下一页边界?

Linux 编程接口

系统调用将brk()程序中断设置为由 指定的位置end_data_segment。由于虚拟内存是以页面为单位分配的,end_data_segment因此有效地向上舍入到下一个页面边界。

所以对于这个演示:

输出:

我希望新的程序中断地址是:0x55b0bc104000 + 0x1000(4096 in HEX) == 0x55b0bc105000

为什么我没有得到0x55b0bc105000,而是0x55b0bc104001

0 投票
1 回答
644 浏览

c - 需要以 2 的幂对齐内存,并在 C 中将程序中断对齐 2 * getpagesize() 的倍数

我正在使用 brk、sbrk 和 getpagesize() 重新编码 malloc 函数

我必须遵守两条规则:

1)我必须将我的记忆与 2 的幂对齐

这意味着:如果对 malloc 的调用是: malloc(9); 我必须返回一个 16 字节的块。(最接近 2 的幂);

2)我必须在 2 页的倍数上对齐中断(程序结束数据段)。

我正在考虑规则,我想知道我是否真实;

规则 1)我只需要返回我的 malloc(所以 malloc 以六进制返回的地址)为 2 的倍数?

对于规则 2)

如果我没记错的话,中断是堆中的最后一个地址,我是否需要像这样设置中断(中断 - 堆开始)%(2 * getpagesize())== 0?或者只是 break % (2 * getpagesize() == 0?谢谢

0 投票
1 回答
199 浏览

c - 自己的 Malloc 实现冻结在 brk

为了练习,我目前正在尝试用 c 编写自己的 malloc 函数。所以我的问题是,在从堆中进行一些分配后,我的程序将冻结。我找到了导致冻结的代码段,当我调用 brk sys 调用时它会冻结。我已经尝试在那里解锁我的互斥锁,但这没有用。为了测试它,我编写了一个永久循环并在数组中分配内存并随机释放它。

我不知道为什么,但是 brk 冻结了我的程序。

谢谢你的帮助!

0 投票
2 回答
332 浏览

c - malloc 会四舍五入到最接近的页面大小吗?

我不确定我是否在这里问一个菜鸟问题,但我走了。我也搜索了很多类似的问题,但我一无所获。

因此,我知道如何工作,mmap并且brk无论您输入的长度如何,它都会将其四舍五入到最近的页面边界。我也知道malloc使用brk/sbrkmmap(至少在 Linux/Unix 系统上)但这提出了一个问题:是否malloc也四舍五入到最接近的页面大小?对我来说,页面大小是 4096 字节,所以如果我想分配 16 字节malloc,4096 字节...比我要求的要多得多。

0 投票
1 回答
50 浏览

c - 我可以强制 sbrk 返回地址在某个特定范围内吗?

我想确保的返回地址sbrk在某个特定范围内。我在某个地方读到了sbrk从程序初始化时分配的区域分配的内容。所以我想知道是否有办法强制程序初始化从特定地址分配?例如,使用mmap,我将能够使用MAP_FIXED_NOREPLACE 。有没有可能有类似的东西?