当前位置: 首页 > 面试题库 >

通过malloc()进行的Windows和Linux本机OS /系统调用是什么?

苍元章
2023-03-14
问题内容

我最近看到了以下帖子:

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

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

或者,您可以将其用作挂钩,以便每次分配或释放内存时都可以执行一些其他任务。

关于您的第二个问题,malloc是在不损失可移植性的前提下可以达到的最低要求。 malloc通常是使用某些特定于OS的内存分配功能实现的
,因此仍将处于较低级别。但这与您的主要问题无关,因为C ++分配器是更高级别的抽象。

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

  • 对于Windows
  • 对于Linux

什么是特定于OS的函数,称为malloc()/的实现?


问题答案:

在Windows中,在最新版本的MSVC中,malloc(和C
new,因为它使用与实际内存分配部分相同的基本原理来实现 new)调用 HeapAlloc()。在其他版本(例如g

mingw)中,C运行时是一个较旧的版本,它的调用方式不像直接调用HeapAlloc,但是在它的基础上,它仍然指向HeapAlloc-要找到不同的地方,我们需要返回到Windows
95之前的版本确实具有GlobalAllocLocalAlloc函数集-但是我认为人们现在不使用16位编译器-至少不是Windows编程。

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



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

  • 本文向大家介绍C++系统调用是什么,你用过哪些系统调用相关面试题,主要包含被问及C++系统调用是什么,你用过哪些系统调用时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1)概念: 在计算机中,系统调用(英语:system call),又称为系统呼叫,指运行在使用者空间的程序向操作系统内核请求需要更高权限运行的服务。系统调用提供了用户程序与操作系统之间的接口(即系统调用是用户程序和内核交互的

  • 本文向大家介绍请你回答一下malloc的原理,另外brk系统调用和mmap系统调用的作用分别是什么?相关面试题,主要包含被问及请你回答一下malloc的原理,另外brk系统调用和mmap系统调用的作用分别是什么?时的应答技巧和注意事项,需要的朋友参考一下 Malloc函数用于动态分配内存。为了减少内存碎片和系统调用的开销,malloc其采用内存池的方式,先申请大块内存作为堆区,然后将堆区分为多个内

  • 本文向大家介绍Unix和Windows中的系统调用,包括了Unix和Windows中的系统调用的使用技巧和注意事项,需要的朋友参考一下 进程和操作系统之间的接口由系统调用提供。通常,系统调用可用作汇编语言说明。它们也包含在汇编级程序员使用的手册中。 Unix系统调用 Unix中的系统调用用于文件系统控制,过程控制,进程间通信等。只能通过这些系统调用来访问Unix内核。通常,系统调用类似于函数调用,

  • 本文向大家介绍在i386和x86-64上UNIX和Linux系统调用的调用约定是什么,包括了在i386和x86-64上UNIX和Linux系统调用的调用约定是什么的使用技巧和注意事项,需要的朋友参考一下 系统调用是应用程序和Linux内核之间的基本接口。当Unix / Linux程序执行文件I / O,网络数据传输或调用某个与低级指令直接或间接交互的进程时,就会涉及系统调用。进行这些调用通常涉及使

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