问题标签 [sbrk]

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 投票
1 回答
1480 浏览

memory-management - sbrk 如何知道从哪个地址开始分配?

我是组装的初学者,我很难让 sbrk 以我想要的方式分配内存。我最终想创建一个二维数组,首先分配一列,然后遍历每一行,一次分配一行。但是,我注意到当我第二次使用 sbrk 时,它并没有从未使用的内存位置开始,而是覆盖了我已经分配的内存地址。所以为了找出我做错了什么,我决定现在使用一维数组。

当我第一次使用

它分配内存块0x10040000。然后我将 3 个整数输入到我分配的这三个位置。之后,我再做一次 sbrk 只是为了看看它从哪个地址开始。当我这样做时,它会分配0x10040004,覆盖我输入的整数之一。以下是我使用的代码。

当这个程序完成时,$s1 = 0x10040000$s2 = 0x10040004.

为什么 sbrk 从已经分配的位置开始分配内存?有没有办法告诉它从特定地址开始?如果我在做一些没有意义的事情,请纠正我。

0 投票
2 回答
1877 浏览

c - c中的sbrk和malloc

我有以下代码

我想打印所有 void 指针的数值并计算多少次 sbrk 函数调用 form malloc?

如果我在 printf 语句中打印 *endptr 它会给我错误。目前我认为它会打印分配内存的地址。%x 只会将当前值转换为十六进制并打印对吗?

x = malloc(60) 也给出了错误: void 值没有被忽略,因为它应该是我该怎么做?

谢谢

0 投票
1 回答
197 浏览

c - 由于奇怪的未知原因导致的分段错误

我得到了segmentation fault (core dumped)以下代码的和平(我正在实施malloc()free()realloc()):

现在,您假设它会打印aaaor bbb,它只是在执行行 X 后立即宣布分段错误printf()。如果我键入“printf("a")" 而不是当前printf()它不会打印 'a'一点也不。这真的很奇怪。它打印:

但它会立即退出并引发分段错误。该变量head是该文件中的静态变量。我真的很想知道问题出在哪里,真的很奇怪。这是头文件中的语句:

就这么简单,你看到这里有什么问题吗?完整的代码可在此处获得,但我怀疑它是否相关,该程序至少应该打印“aaa”或“bbb”,但它不会这样做。任何想法?我真的很绝望。

0 投票
1 回答
1183 浏览

linux - 为什么我的 sbrk 系统调用的实现不起作用?

我尝试编写一个非常简单的操作系统来更好地理解基本原理。我需要实现用户空间malloc。所以起初我想在我的 linux 机器上实现和测试它。

起初我通过以下方式实现了 sbrk() 函数

但是这段代码不起作用。相反,当我使用 os 提供的 sbrk 时,它工作正常。

我尝试使用 sbrk() 的另一种实现

从此函数调用的 sbrk

此代码也不起作用,就行(***)我得到分段错误。哪里有问题?

谢谢大家。我已经使用 sbrk 的新实现解决了我的问题。给定的代码工作正常。

0 投票
2 回答
2667 浏览

c - Linux - 为什么每次运行程序时程序中断指针(brk/sbrk)都不同?

我知道程序中断是Linux操作系统为进程分配的最高虚拟内存地址,因此标记了堆的最高地址。您可以通过调用sbrk(0)来获取程序中断的地址。

当我创建以下琐碎的程序时,每次运行时都会得到不同的结果:

例如,在我的电脑上:

我的理解是堆被分配在虚拟内存中 BSS 部分的正上方——我想我希望它对于像这样的普通程序总是具有相同的初始值。程序中断最初定位的位置是否有一些随机化或某些东西?如果不是,为什么每次运行程序都不同?

0 投票
2 回答
1917 浏览

c - 用于实现我自己的 malloc 函数的 C 代码

我的 C 代码有问题。我必须做一个 malloc 函数。首先是我的代码:

而且我不明白为什么我在这里有段错误:

我用了 2 个小时,找不到错误...

如果有人可以帮助我,那就太好了。谢谢。

0 投票
3 回答
16330 浏览

c - malloc() 使用 brk() 还是 mmap()?

0 投票
1 回答
971 浏览

c - C程序中的sbrk函数和指针

代码:

怀疑:

考虑 morecore 函数从其他函数调用并从参数(nu)接收 4 作为 int。我对以下陈述有疑问。

up 只是一个指向 Header 的指针。但是,它仍然没有指向任何 Header 变量。sbrk 分配请求的内存并返回当前程序中断并将其存储在 cp 中。然后将存储在cp中的地址强制转换并分配给up。现在, up 包含由 sbrk 作为指向 Header 变量的指针返回的地址。然后出现以下语句,

up仅包含 sbrk 返回的地址。那么上面的语句如何将 nu 存储在 size 变量中。

0 投票
2 回答
137 浏览

c - mmap(2) 返回的地址是否有可能与堆发生冲突?

如果我使用 分配一些页面,而不提供mmap(2)地址提示,然后使用malloc(3)/分配一些内存calloc(3),是否有可能以重叠到我之前调用或返回的地址的方式malloc调用和增长堆返回一个远离堆或栈的地址?sbrk(2)mmapmmap

0 投票
2 回答
2916 浏览

embedded - ChibiOS 中对 _sbrk 的未定义引用

我正在使用 ChibiOS 3.x 编写嵌入式应用程序。编译/链接它时,我遇到这样的错误消息:

在哪里_sbrk定义,我该如何解决这个问题?