问题标签 [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.
memory-management - sbrk 如何知道从哪个地址开始分配?
我是组装的初学者,我很难让 sbrk 以我想要的方式分配内存。我最终想创建一个二维数组,首先分配一列,然后遍历每一行,一次分配一行。但是,我注意到当我第二次使用 sbrk 时,它并没有从未使用的内存位置开始,而是覆盖了我已经分配的内存地址。所以为了找出我做错了什么,我决定现在使用一维数组。
当我第一次使用
它分配内存块0x10040000
。然后我将 3 个整数输入到我分配的这三个位置。之后,我再做一次 sbrk 只是为了看看它从哪个地址开始。当我这样做时,它会分配0x10040004
,覆盖我输入的整数之一。以下是我使用的代码。
当这个程序完成时,$s1 = 0x10040000
和$s2 = 0x10040004
.
为什么 sbrk 从已经分配的位置开始分配内存?有没有办法告诉它从特定地址开始?如果我在做一些没有意义的事情,请纠正我。
c - c中的sbrk和malloc
我有以下代码
我想打印所有 void 指针的数值并计算多少次 sbrk 函数调用 form malloc?
如果我在 printf 语句中打印 *endptr 它会给我错误。目前我认为它会打印分配内存的地址。%x 只会将当前值转换为十六进制并打印对吗?
x = malloc(60) 也给出了错误: void 值没有被忽略,因为它应该是我该怎么做?
谢谢
c - 由于奇怪的未知原因导致的分段错误
我得到了segmentation fault (core dumped)
以下代码的和平(我正在实施malloc()
,free()
和realloc()
):
现在,您假设它会打印aaa
or bbb
,它只是在执行行 X 后立即宣布分段错误printf()
。如果我键入“printf("a")" 而不是当前printf()
它不会打印 'a'一点也不。这真的很奇怪。它打印:
但它会立即退出并引发分段错误。该变量head
是该文件中的静态变量。我真的很想知道问题出在哪里,真的很奇怪。这是头文件中的语句:
就这么简单,你看到这里有什么问题吗?完整的代码可在此处获得,但我怀疑它是否相关,该程序至少应该打印“aaa”或“bbb”,但它不会这样做。任何想法?我真的很绝望。
linux - 为什么我的 sbrk 系统调用的实现不起作用?
我尝试编写一个非常简单的操作系统来更好地理解基本原理。我需要实现用户空间malloc。所以起初我想在我的 linux 机器上实现和测试它。
起初我通过以下方式实现了 sbrk() 函数
但是这段代码不起作用。相反,当我使用 os 提供的 sbrk 时,它工作正常。
我尝试使用 sbrk() 的另一种实现
从此函数调用的 sbrk
此代码也不起作用,就行(***)我得到分段错误。哪里有问题?
谢谢大家。我已经使用 sbrk 的新实现解决了我的问题。给定的代码工作正常。
c - Linux - 为什么每次运行程序时程序中断指针(brk/sbrk)都不同?
我知道程序中断是Linux操作系统为进程分配的最高虚拟内存地址,因此标记了堆的最高地址。您可以通过调用sbrk(0)来获取程序中断的地址。
当我创建以下琐碎的程序时,每次运行时都会得到不同的结果:
例如,在我的电脑上:
我的理解是堆被分配在虚拟内存中 BSS 部分的正上方——我想我希望它对于像这样的普通程序总是具有相同的初始值。程序中断最初定位的位置是否有一些随机化或某些东西?如果不是,为什么每次运行程序都不同?
c - 用于实现我自己的 malloc 函数的 C 代码
我的 C 代码有问题。我必须做一个 malloc 函数。首先是我的代码:
而且我不明白为什么我在这里有段错误:
我用了 2 个小时,找不到错误...
如果有人可以帮助我,那就太好了。谢谢。
c - C程序中的sbrk函数和指针
代码:
怀疑:
考虑 morecore 函数从其他函数调用并从参数(nu)接收 4 作为 int。我对以下陈述有疑问。
up 只是一个指向 Header 的指针。但是,它仍然没有指向任何 Header 变量。sbrk 分配请求的内存并返回当前程序中断并将其存储在 cp 中。然后将存储在cp中的地址强制转换并分配给up。现在, up 包含由 sbrk 作为指向 Header 变量的指针返回的地址。然后出现以下语句,
up
仅包含 sbrk 返回的地址。那么上面的语句如何将 nu 存储在 size 变量中。
c - mmap(2) 返回的地址是否有可能与堆发生冲突?
如果我使用 分配一些页面,而不提供mmap(2)
地址提示,然后使用malloc(3)
/分配一些内存calloc(3)
,是否有可能以重叠到我之前调用或返回的地址的方式malloc
调用和增长堆返回一个远离堆或栈的地址?sbrk(2)
mmap
mmap
embedded - ChibiOS 中对 _sbrk 的未定义引用
我正在使用 ChibiOS 3.x 编写嵌入式应用程序。编译/链接它时,我遇到这样的错误消息:
在哪里_sbrk
定义,我该如何解决这个问题?