问题标签 [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.

0 投票
10 回答
25695 浏览

c++ - 您可以在 c 或 c++ 中分配一个非常大的单个内存块(> 4GB)吗?

这些天我想知道有非常大量的内存,是否可以分配一块大于 4GB 的内存?还是我需要分配一堆较小的块并处理它们之间的切换?

为什么???我正在处理一些openstreetmap xml数据,这些文件很大。我目前正在将它们流式传输,因为我无法将它们全部加载到一个块中,但我只是对 malloc 或 new 的上限感到好奇。

0 投票
20 回答
319065 浏览

c++ - 在什么情况下我使用 malloc 和/或 new?

我在 C++ 中看到有多种分配和释放数据的方法,我知道当你调用时malloc你应该调用free,当你使用new操作符时你应该配对,delete将两者混合是错误的(例如调用free()创建的东西与new操作员),但我不清楚何时应该在我的现实世界的程序中使用malloc/free以及何时应该使用new/ 。delete

如果您是 C++ 专家,请告诉我您在这方面遵循的任何经验法则或约定。

0 投票
7 回答
5493 浏览

operating-system - 除了 malloc/free 程序是否需要操作系统来提供其他任何东西?

我正在为我正在开发的操作系统设计内核(我实际上将其称为“核心”只是为了不同,但它基本相同)。如果我无法启动并运行多任务、内存管理和其他基本功能,那么操作系统本身的细节就无关紧要了,所以我需要先解决这个问题。我有一些关于设计 malloc 例程的问题。

我认为 malloc() 要么是内核本身的一部分(我倾向于这个)要么是程序的一部分,但我将不得不编写自己的 C 标准库的实现方式,所以我开始写一个malloc。在这方面我的问题实际上相当简单,C(或C++)如何管理它的堆?

我在理论课上一直被教导的是,堆是一块不断扩展的内存,从指定的地址开始,并且在很多意义上表现得像一个堆栈。这样,我知道在全局范围内声明的变量在开头,更多的变量在各自的范围内声明时被“推送”到堆上,超出范围的变量只是留在内存空间中,但是该空间被标记为空闲,因此如果需要,堆可以扩展更多。

我需要知道的是,C 究竟如何以这种方式处理动态扩展堆?编译后的 C 程序是否会自己调用 malloc 例程并处理自己的堆,还是需要为它提供自动扩展空间?另外,C 程序如何知道堆的开始位置?

哦,我知道同样的概念也适用于其他语言,但我希望任何示例都使用 C/C++,因为我最熟悉那种语言。我也不想担心堆栈等其他事情,因为我认为我能够自己处理这样的事情。

所以我想我真正的问题是,除了 malloc/free(它自己处理获取和释放页面等)之外,程序是否需要操作系统来提供其他任何东西?

谢谢!

编辑我对 C 如何使用与堆相关的 malloc 比对 malloc 例程本身的实际工作更感兴趣。如果有帮助,我会在 x86 上执行此操作,但 C 是交叉编译器,所以没关系。^_^

进一步编辑:我知道我可能会混淆术语。我被告知“堆”是程序存储诸如全局/局部变量之类的东西的地方。我习惯于在汇编编程中处理“堆栈”,我刚刚意识到我可能是这个意思。我的一些研究表明,“堆”更常用来指代程序为自己分配的总内存,或者操作系统提供的内存页的总数(和顺序)。

那么,考虑到这一点,我该如何处理不断扩大的堆栈?(看来我的 C 理论课有点……有缺陷。)

0 投票
6 回答
20677 浏览

c - Malloc 错误:释放对象的校验和不正确

我正在为一项任务实施tail。我让它正常工作,但我似乎在随机时间免费收到错误。

我看不到,要追踪到一种模式或除此之外的任何东西是一致的。

例如,如果我将我的程序称为“tail -24 test.in”,我会在多次运行的同一行中得到不正确的校验和错误。但是,使用不同的文件,甚至不同的行数要打印回来,我会毫无错误地回来。

关于如何追踪问题的任何想法,我一直在尝试调试它几个小时,但无济于事。

这是有问题的代码:

lines 定义为 char** 并且 malloc 为:

0 投票
14 回答
46059 浏览

c - 如何从 C 中的指针获取数组的大小?

我分配了一个mystruct大小n如下的“数组”:

后来,我只能访问p,而不再拥有n。有没有办法确定仅给定指针的数组的长度p

我认为这一定是可能的,因为free(p)它就是这样做的。我知道malloc()跟踪它分配了多少内存,这就是它知道长度的原因;也许有办法查询这些信息?就像是...

我知道我应该重新编写代码以便我知道n,但如果可能的话我宁愿不这样做。有任何想法吗?

0 投票
7 回答
5364 浏览

c++ - Windows C 代码上的内存分配

我想知道在 Windows C 编程中推荐哪种方法:使用 malloc 或 Win32 HeapAlloc(可能是 VirtualAlloc?)函数。

我已经阅读了 MSDN内存管理函数文章和有关 malloc 和 HeapAlloc 的 MSDN 文章,但他们没有说明应该使用哪一个以及在什么情况下使用。

0 投票
10 回答
51612 浏览

c - 在 C 中为 malloc 和 free 创建一个包装函数

我正在尝试为Cfreemalloc在 C 中创建包装函数,以帮助通知我内存泄漏。有谁知道如何声明这些函数,所以当我调用它malloc()free()它会调用我的自定义函数而不是标准库函数?

0 投票
1 回答
345 浏览

memory - 从 SafeArrayGetElem 调用中释放内存?

我在 C# 中有一些代码,它有一个 com 包装器。此 com 包装器用于本机 c++ 应用程序。c++ 代码使用一种方法,该方法从 c# 库中返回一个类的实例数组。实例来自 SafeArray,如下所示:

我想释放为实例 l 分配的内存,但是如果我调用

然后我崩溃了。

我试过了

并使用

但我仍然为数组中的每个实例泄漏 4 个字节。

任何想法我应该如何去释放这个记忆?

0 投票
5 回答
10037 浏览

c - 使用 Malloc 钩子

我正在尝试使用 malloc 挂钩来创建自定义函数 my_malloc()。在我的主程序中,当我调用 malloc() 我希望它调用 my_malloc() 有人可以给我一个关于如何在 C 中执行此操作的示例

0 投票
8 回答
3451 浏览

c - 检查是否有东西被分配

给定一个指向某个变量的指针..有没有办法检查它是静态分配的还是动态分配的?