问题标签 [malloc]
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.
c++ - 您可以在 c 或 c++ 中分配一个非常大的单个内存块(> 4GB)吗?
这些天我想知道有非常大量的内存,是否可以分配一块大于 4GB 的内存?还是我需要分配一堆较小的块并处理它们之间的切换?
为什么???我正在处理一些openstreetmap xml数据,这些文件很大。我目前正在将它们流式传输,因为我无法将它们全部加载到一个块中,但我只是对 malloc 或 new 的上限感到好奇。
c++ - 在什么情况下我使用 malloc 和/或 new?
我在 C++ 中看到有多种分配和释放数据的方法,我知道当你调用时malloc
你应该调用free
,当你使用new
操作符时你应该配对,delete
将两者混合是错误的(例如调用free()
创建的东西与new
操作员),但我不清楚何时应该在我的现实世界的程序中使用malloc
/free
以及何时应该使用new
/ 。delete
如果您是 C++ 专家,请告诉我您在这方面遵循的任何经验法则或约定。
operating-system - 除了 malloc/free 程序是否需要操作系统来提供其他任何东西?
我正在为我正在开发的操作系统设计内核(我实际上将其称为“核心”只是为了不同,但它基本相同)。如果我无法启动并运行多任务、内存管理和其他基本功能,那么操作系统本身的细节就无关紧要了,所以我需要先解决这个问题。我有一些关于设计 malloc 例程的问题。
我认为 malloc() 要么是内核本身的一部分(我倾向于这个)要么是程序的一部分,但我将不得不编写自己的 C 标准库的实现方式,所以我开始写一个malloc。在这方面我的问题实际上相当简单,C(或C++)如何管理它的堆?
我在理论课上一直被教导的是,堆是一块不断扩展的内存,从指定的地址开始,并且在很多意义上表现得像一个堆栈。这样,我知道在全局范围内声明的变量在开头,更多的变量在各自的范围内声明时被“推送”到堆上,超出范围的变量只是留在内存空间中,但是该空间被标记为空闲,因此如果需要,堆可以扩展更多。
我需要知道的是,C 究竟如何以这种方式处理动态扩展堆?编译后的 C 程序是否会自己调用 malloc 例程并处理自己的堆,还是需要为它提供自动扩展空间?另外,C 程序如何知道堆的开始位置?
哦,我知道同样的概念也适用于其他语言,但我希望任何示例都使用 C/C++,因为我最熟悉那种语言。我也不想担心堆栈等其他事情,因为我认为我能够自己处理这样的事情。
所以我想我真正的问题是,除了 malloc/free(它自己处理获取和释放页面等)之外,程序是否需要操作系统来提供其他任何东西?
谢谢!
编辑我对 C 如何使用与堆相关的 malloc 比对 malloc 例程本身的实际工作更感兴趣。如果有帮助,我会在 x86 上执行此操作,但 C 是交叉编译器,所以没关系。^_^
进一步编辑:我知道我可能会混淆术语。我被告知“堆”是程序存储诸如全局/局部变量之类的东西的地方。我习惯于在汇编编程中处理“堆栈”,我刚刚意识到我可能是这个意思。我的一些研究表明,“堆”更常用来指代程序为自己分配的总内存,或者操作系统提供的内存页的总数(和顺序)。
那么,考虑到这一点,我该如何处理不断扩大的堆栈?(看来我的 C 理论课有点……有缺陷。)
c - Malloc 错误:释放对象的校验和不正确
我正在为一项任务实施tail。我让它正常工作,但我似乎在随机时间免费收到错误。
我看不到,要追踪到一种模式或除此之外的任何东西是一致的。
例如,如果我将我的程序称为“tail -24 test.in”,我会在多次运行的同一行中得到不正确的校验和错误。但是,使用不同的文件,甚至不同的行数要打印回来,我会毫无错误地回来。
关于如何追踪问题的任何想法,我一直在尝试调试它几个小时,但无济于事。
这是有问题的代码:
lines 定义为 char** 并且 malloc 为:
c - 如何从 C 中的指针获取数组的大小?
我分配了一个mystruct
大小n
如下的“数组”:
后来,我只能访问p
,而不再拥有n
。有没有办法确定仅给定指针的数组的长度p
?
我认为这一定是可能的,因为free(p)
它就是这样做的。我知道malloc()
跟踪它分配了多少内存,这就是它知道长度的原因;也许有办法查询这些信息?就像是...
我知道我应该重新编写代码以便我知道n
,但如果可能的话我宁愿不这样做。有任何想法吗?
c++ - Windows C 代码上的内存分配
我想知道在 Windows C 编程中推荐哪种方法:使用 malloc 或 Win32 HeapAlloc(可能是 VirtualAlloc?)函数。
我已经阅读了 MSDN内存管理函数文章和有关 malloc 和 HeapAlloc 的 MSDN 文章,但他们没有说明应该使用哪一个以及在什么情况下使用。
c - 在 C 中为 malloc 和 free 创建一个包装函数
我正在尝试为Cfree
和malloc
在 C 中创建包装函数,以帮助通知我内存泄漏。有谁知道如何声明这些函数,所以当我调用它malloc()
时free()
它会调用我的自定义函数而不是标准库函数?
memory - 从 SafeArrayGetElem 调用中释放内存?
我在 C# 中有一些代码,它有一个 com 包装器。此 com 包装器用于本机 c++ 应用程序。c++ 代码使用一种方法,该方法从 c# 库中返回一个类的实例数组。实例来自 SafeArray,如下所示:
我想释放为实例 l 分配的内存,但是如果我调用
然后我崩溃了。
我试过了
并使用
但我仍然为数组中的每个实例泄漏 4 个字节。
任何想法我应该如何去释放这个记忆?
c - 使用 Malloc 钩子
我正在尝试使用 malloc 挂钩来创建自定义函数 my_malloc()。在我的主程序中,当我调用 malloc() 我希望它调用 my_malloc() 有人可以给我一个关于如何在 C 中执行此操作的示例
c - 检查是否有东西被分配
给定一个指向某个变量的指针..有没有办法检查它是静态分配的还是动态分配的?