草庐IT

malloced

全部标签

c - 使用execvp后如何释放malloc创建的内存?

在我的C程序中,我创建了一个子进程并在其中解析了一个字符串并创建了一个指针数组(使用malloc())用于将其传递给execvp()命令。但问题是,如何释放子进程创建的内存?execvp()运行新任务,可能返回也可能不返回。如果它没有返回,那么它就成功了,child死了(我不能真正使用free()命令)。如果失败则返回,然后继续执行下一行代码,这是释放内存的唯一机会吗? 最佳答案 你不需要。具体来说,如果您在调用exec()类型例程(例如,在您的情况下为execvp())之前在进程中分配内存,则与原始可执行文件被释放。这与一个进程退

c - 使用execvp后如何释放malloc创建的内存?

在我的C程序中,我创建了一个子进程并在其中解析了一个字符串并创建了一个指针数组(使用malloc())用于将其传递给execvp()命令。但问题是,如何释放子进程创建的内存?execvp()运行新任务,可能返回也可能不返回。如果它没有返回,那么它就成功了,child死了(我不能真正使用free()命令)。如果失败则返回,然后继续执行下一行代码,这是释放内存的唯一机会吗? 最佳答案 你不需要。具体来说,如果您在调用exec()类型例程(例如,在您的情况下为execvp())之前在进程中分配内存,则与原始可执行文件被释放。这与一个进程退

c++ - 如何使用 linux perf 获取 libc6 符号(例如 _int_malloc)的调用父项?

我正在使用linuxperf分析一个C++应用程序,并且我使用GProf2dot得到了一个很好的控制流图.但是,C库(libc6-2.13.so)中的一些符号占用了总时间的很大一部分,但没有边。例如:_int_malloc占用了8%的时间,但没有调用parents。__strcmp_sse42和__cxxabiv1::__si_class_type_info::__do_dyncast一起占用了大约10%的时间,并且调用者的名字是0,它有调用者2d6935c、2cc748c和没有调用者的6。因此,我无法仅使用perf找出哪些例程负责所有这些分配和动态转换。但是,似乎其他符号(例如mal

c++ - 如何使用 linux perf 获取 libc6 符号(例如 _int_malloc)的调用父项?

我正在使用linuxperf分析一个C++应用程序,并且我使用GProf2dot得到了一个很好的控制流图.但是,C库(libc6-2.13.so)中的一些符号占用了总时间的很大一部分,但没有边。例如:_int_malloc占用了8%的时间,但没有调用parents。__strcmp_sse42和__cxxabiv1::__si_class_type_info::__do_dyncast一起占用了大约10%的时间,并且调用者的名字是0,它有调用者2d6935c、2cc748c和没有调用者的6。因此,我无法仅使用perf找出哪些例程负责所有这些分配和动态转换。但是,似乎其他符号(例如mal

c - malloc/calloc返回的内存地址是从虚拟地址空间来的吗?

char*ptr=(char*)malloc(40);printf("%u",ptr);56737856(someoutput)现在,如果我没记错的话,我们在上面看到的输出不是物理地址,而是来自虚拟地址空间。我说得对吗?有什么办法可以看到实际的物理地址吗?反之亦然(如果我上面的假设是错误的),malloc的所有内部实现是否都必须使用jemalloc算法? 最佳答案 您在用户空间应用程序中看到的所有地址都是虚拟地址。物理地址只与内核有关。从虚拟地址到物理地址的映射很复杂,因为:并非所有虚拟地址都有物理地址。(例如,未映射、延迟零填充或

c - malloc/calloc返回的内存地址是从虚拟地址空间来的吗?

char*ptr=(char*)malloc(40);printf("%u",ptr);56737856(someoutput)现在,如果我没记错的话,我们在上面看到的输出不是物理地址,而是来自虚拟地址空间。我说得对吗?有什么办法可以看到实际的物理地址吗?反之亦然(如果我上面的假设是错误的),malloc的所有内部实现是否都必须使用jemalloc算法? 最佳答案 您在用户空间应用程序中看到的所有地址都是虚拟地址。物理地址只与内核有关。从虚拟地址到物理地址的映射很复杂,因为:并非所有虚拟地址都有物理地址。(例如,未映射、延迟零填充或

c - 在 malloc 中,为什么要使用 brk?为什么不直接使用 mmap?

malloc的典型实现使用brk/sbrk作为从操作系统申请内存的主要方式。但是,他们还使用mmap来获取大分配的block。使用brk而不是mmap真的有好处吗,还是只是传统?用mmap做这一切不是同样有效吗?(注意:我在这里互换使用sbrk和brk因为它们是同一个Linux系统调用brk的接口(interface)。)作为引用,这里有一些描述glibcmalloc的文档:GNUC库引用手册:GNU分配器https://www.gnu.org/software/libc/manual/html_node/The-GNU-Allocator.htmlglibcwiki:Malloc概述

c - 在 malloc 中,为什么要使用 brk?为什么不直接使用 mmap?

malloc的典型实现使用brk/sbrk作为从操作系统申请内存的主要方式。但是,他们还使用mmap来获取大分配的block。使用brk而不是mmap真的有好处吗,还是只是传统?用mmap做这一切不是同样有效吗?(注意:我在这里互换使用sbrk和brk因为它们是同一个Linux系统调用brk的接口(interface)。)作为引用,这里有一些描述glibcmalloc的文档:GNUC库引用手册:GNU分配器https://www.gnu.org/software/libc/manual/html_node/The-GNU-Allocator.htmlglibcwiki:Malloc概述

c++ - 从 malloc() 进行的 Windows 和 Linux native 操作系统/系统调用是什么?

我最近看到了下面的帖子:Amemoryallocatorisn'tlowerlevelthanmalloc.(Thedefaultallocatortypicallycallsmallocdirectlyorindirectly)Anallocatorjustallowsyoutospecifydifferentallocationstrategies.Forexample,youmightuseanallocatorwhichcallsmalloconcetoretrievealargepoolofmemory,andthenforsubsequentallocationreques

c++ - 从 malloc() 进行的 Windows 和 Linux native 操作系统/系统调用是什么?

我最近看到了下面的帖子:Amemoryallocatorisn'tlowerlevelthanmalloc.(Thedefaultallocatortypicallycallsmallocdirectlyorindirectly)Anallocatorjustallowsyoutospecifydifferentallocationstrategies.Forexample,youmightuseanallocatorwhichcallsmalloconcetoretrievealargepoolofmemory,andthenforsubsequentallocationreques