当前位置: 首页 > 知识库问答 >
问题:

从malloc()进行的Windows和Linux本机操作系统/系统调用是什么?

锺伟志
2023-03-14

我最近看到了以下帖子:

内存分配器的级别不低于malloc。(默认分配器通常直接或间接调用malloc)

分配器只允许您指定不同的分配策略。例如,您可以使用一个分配器,它调用malloc一次来检索一个大内存池,然后对于后续的分配请求,它只返回这个内存池的一小部分。

或者,您可以将其用作钩子,允许您在每次分配或释放内存时执行一些额外的任务。

关于你的第二个问题,malloc是您可以在不失去可移植性的情况下使用的最低级别。malloc通常使用一些特定于操作系统的内存分配函数来实现,因此这仍然是较低级别的。但这与您的主要问题无关,因为C分配器是更高级别的抽象。

来自:C:内存分配器

我的问题是-malloc如何在以下操作系统中实现?

  • 对于Windows
  • Linux

被称为malloc()的/实现的操作系统特定函数是什么?

共有3个答案

夏学名
2023-03-14

好吧,我不确定Linux,但说到windows。。。

内存可以分为两类。

1)堆(进程堆、自定义创建的堆)参见-

2)虚拟内存(由于全局虚拟内存中的访问限制,通常仅限于特定于进程的安全),使用VirtualAlloc、VirtualFree。请参阅-

据我所知,malloc将在windows上使用堆分配函数。

我希望这能有所帮助。

唐高朗
2023-03-14

我的问题是-malloc如何在以下操作系统中实现?

在Linux上有两种著名的malloc实现:

dlmalloc(Doug Lea的malloc)

ptmalloc公司

在Linuxlibc上,如glibc、eglibc或newlib实现ptmalloc或ptmalloc的变体。

被称为malloc()的/实现的操作系统特定函数是什么?

在Unix和Linux系统上使用sbrkmmap系统调用。有关详细信息,请参阅man 2 sbrkman 2 mmap

单于承
2023-03-14

在Windows中,在MSVC的最新版本中,malloc(和Cnew,因为它是使用new的实际内存分配部分的相同基础来实现的)调用HeapAlloc()。在其他版本中,例如g Ming w,C运行时是一个较旧的版本,它不那么直接调用HeapAlloc,但在它的基础上,它仍然转到HeapAlloc-要找到不同的东西,我们需要回到Windows pre-95,它确实有一组GlobalAllocLocalAlloc函数-但我认为现在人们不使用16位编译器-至少不用于Windows编程。

在Linux中,如果您使用glibc,则取决于分配的大小,它是调用sbrk还是mmap(在标志中使用MAP\u匿名),用于更大的分配(超过阈值,我认为在典型实现中是2MB)

 类似资料:
  • 问题内容: 我最近看到了以下帖子: 内存分配器的级别不低于malloc。(默认分配器通常直接或间接调用malloc) 分配器仅允许您指定不同的分配策略。例如,您可以使用一个分配器,该分配器一次调用malloc来检索一个大的内存池,然后对于后续的分配请求,它仅返回该池的一小部分。 或者,您可以将其用作挂钩,以便每次分配或释放内存时都可以执行一些其他任务。 关于您的第二个问题,malloc是在不损失可

  • sed sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。 sed命令行格式为: sed [-nefri] ‘command’ 输入文本 常用选项: -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的

  • Linux 也是众多操作系统之一,要想知道 Linux 是什么,首先得说一说什么是操作系统。 计算机是一台机器,它按照用户的要求接收信息、存储数据、处理数据,然后再将处理结果输出(文字、图片、音频、视频等)。计算机由硬件和软件组成: 硬件是计算机赖以工作的实体,包括显示器、键盘、鼠标、硬盘、CPU、主板等; 软件会按照用户的要求协调整台计算机的工作,比如 Windows、Linux、Mac OS、

  • 问题内容: 我不确定我在问正确的问题…但是当我阅读所有可以接触到的docker时,我发现可以在Ubuntu 12.04上安装Docker(例如),然后安装一个Fedora容器还是其他版本的ubuntu?(有一个示例,其中用户在容器中安装了busybox。) 当然,我可能完全错了。 但是,我希望基本系统与容器之间存在短暂的连接。 重述:主机操作系统和容器基础映像的操作系统之间是什么关系? 问题答案:

  • 系统调用 我们要想启动一个进程,需要操作系统的调用(system call)。实际上操作系统和普通进程是运行在不同空间上的,操作系统进程运行在内核态(todo: kernel space),开发者运行的进程运行在用户态(todo: user space),这样有效规避了用户程序破坏系统的可能。 如果用户态进程想执行内核态的操作,只能通过系统调用了。Linux提供了超多系统调用函数,我们关注与进程相

  • 操作系统提供的服务 操作系统的五大功能,分别为:作业管理、文件管理、存储管理、输入输出设备管理、进程及处理机管理 中断 所谓的中断就是在计算机执行程序的过程中,由于出现了某些特殊事情,使得CPU暂停对程序的执行,转而去执行处理这一事件的程序。等这些特殊事情处理完之后再回去执行之前的程序。中断一般分为三类: 内部异常中断:由计算机硬件异常或故障引起的中断; 软中断:由程序中执行了引起中断的指令而造成