c - C程序设置堆起始地址?

标签 c gcc elf heap-memory

有没有办法在linux中设置GCC编译的C程序的堆起始地址?在 x86_64 系统中,我的测试程序将堆地址设置为 4 字节引用地址(小于 FFFFFFFF)。我想将其设置为 8 字节引用地址以进行一些测试 (> FFFFFFFF)。 GCC 是否提供任何方法来设置堆起始地址?

最佳答案

您可以使用 sbrk() 间接地执行此操作:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
  sbrk(0xFFFFFFFF);
  printf("%p\n", malloc(1));
  return 0;
}

这是通过在最开始“分配”0xFFFFFFFF 字节来实现的,因此接下来 malloc() 可以分配的是更高的地址。

关于c - C程序设置堆起始地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28103943/

相关文章:

c - 结构体/结构体值的内存分配

linux - 将附加代码合并到可执行文件中 (arm-linux)

c - 通过可加载内核模块拦截 linux 内核 : fs/binfmt_elf. c 文件中的 ELF 加载程序

c - 我应该如何使用指向指针的指针到达实际节点?

在 C 编程中使用等号比较字符串

c - 我如何在 GTK3 中改变 GtkDrawingArea 上的鼠标光标?

c - 即使设置了 sysroot,ld.exe 也找不到/lib/libc.so.6

c - 如何在不使用 if 或 switch 语句的情况下编写此函数(有效性检查/变量保护检查除外)?

c++ - 带有 GNU STL 的 GCC 4.8 为 std::string 构造函数生成错误代码?

c - __libc_start_main 和 _start 是什么?