malloc相关内容

Windows malloc 替换(例如 tcmalloc)和动态 crt 链接

使用多个 DLL 和 QT 的 C++ 程序应配备 malloc 替换(如 tcmalloc) 用于可验证由 Windows malloc 引起的性能问题.对于 linux,没有问题,但是对于 windows,有几种方法,我觉得它们都没有吸引力: 1.将新的 malloc 放入 lib 并确保先链接它 (其他 SO 问题) 这有一个缺点,例如 strdup 仍将使用旧的 malloc, ..
发布时间:2021-12-25 16:06:23 其他开发

为什么类型转换为空指针?

作为 C 的新手,我从 void 指针中得到的唯一实际用途是用于可以在给定指针中存储不同数据类型的多功能函数.因此,我在进行内存分配时没有对指针进行类型转换. 我看过一些代码示例,有时会使用 void 指针,但它们会进行类型转换.为什么这很有用?为什么不直接创建所需类型的指针而不是 void? 解决方案 在 C 中将 void 指针强制转换为另一种类型有两个原因. 如果你想访问 ..
发布时间:2021-12-25 13:30:08 其他开发

全局非抛出 ::operator new 和 std::malloc 的区别

C++ 有几个函数来获取动态存储,其中大多数在一些基本方式上有所不同.操作系统通常会添加更多. 由于它们的可移植性和相似性,其中两个特别有趣:malloc 和 ::operator new. 全局 void* operator new(size_t, ::std::nothrow&) 和 void* malloc(size_t)? 由于我所说的似乎有些混乱,请考虑以下两个调用: ..
发布时间:2021-12-24 17:09:47 C/C++开发

新建,删除,malloc &自由

这个问题是在一次采访中问我的: 在 C++ 中, 如果我们使用 malloc 分配内存并使用 delete 来释放分配的内存会怎样? 如果我们使用 new 分配内存并使用 free 释放它会怎样? 如果在代码中使用上述东西,我们会面临哪些问题? 我的回答是没有区别.我这样说对吗? 解决方案 如果你这样做,你会遇到未定义的行为.永远不要尝试.尽管 new 可能通过 ..
发布时间:2021-12-24 17:04:33 C/C++开发

跨dll边界的内存分配和释放

我知道在一个 dll 中进行的内存分配然后在另一个 dll 中释放会导致各种问题,尤其是关于 CRT.在导出 STL 容器时,这类问题尤其成问题.我们以前遇到过这类问题(在编写与我们的库链接的自定义 Adob​​e 插件时),我们已经通过定义我们在所有容器中使用的自己的分配器来解决这些问题,例如: typedef std::vector >VectorSess ..
发布时间:2021-12-24 17:00:48 C/C++开发

如何在 C 中释放内存?

我正在编写的代码有很多 1 &二维数组.我收到“错误:无法分配区域"我认为这是因为分配了太多内存.我使用“malloc"和“免费"功能,但我不确定我是否正确使用它们.也许你知道我在哪里可以看到关于 C 中内存管理的好例子? 所以..我只是想让一个算法工作,现在这段代码只是一个又一个函数.. //一维数组的内存分配缓冲区 = malloc(num_items*sizeof(double)); ..
发布时间:2021-12-24 16:59:07 其他开发

为什么在释放指针后取消引用指针会得到不同的结果?

我有一个关于 C 中内存管理的问题(以及 Debian GNU/Linux 下的 GCC 4.3.3). 根据 K&R 的 C Programming Language Book(第 7.8.5 章),当我释放一个指针然后取消引用它时,是一个错误.但是我有一些疑问,因为我注意到有时,就像我在下面粘贴的源代码中那样,编译器 (?) 似乎根据明确定义的原则工作. 我有一个像这样的简单程序, ..
发布时间:2021-12-24 16:57:33 其他开发

为什么在C中使用malloc时要指定大小?

取以下代码: int *p = malloc(2 * sizeof *p);p[0] = 10;//使用两个空格我p[1] = 20;//之前用malloc分配过.p[2] = 30;//使用另一个我没有分配的空间.printf("%d", *(p+1));//正确打印20printf("%d", *(p+2));//另外,正确打印30//虽然我没有为它分配空间 随着行 malloc(2 * ..
发布时间:2021-12-24 16:56:30 其他开发

程序终止后动态分配的内存

当一个包含动态分配内存(使用 malloc/new)而没有 free/delete 调用的 C/C++ 程序终止时,动态分配的内存会发生什么?操作系统是收回内存还是其他程序无法访问该内存? 解决方案 我不认为语言标准有任何保证,但是支持稀疏虚拟内存和内存保护的现代操作系统(如 MacOS X、Linux、所有最新版本的 Windows 和所有当前制造的手机)在行为不良的进程(当它们终止时) ..
发布时间:2021-12-24 16:52:35 C/C++开发

退出 C 中的程序时是否释放所需的已分配内存

如果我使用 malloc 在我的 C 程序中分配了内存,现在我想退出,我是否必须释放分配的内存,或者我可以假设因为我的整个程序终止,它将是被操作系统释放? 我在 Linux 环境中运行. 解决方案 任何现代操作系统都会在进程终止后清理所有内容,但依赖于此通常不是一个好的做法. 这取决于您正在编写的程序.如果它只是一个快速运行和终止的命令行工具,您可能不会费心清理.但请注意,正是 ..
发布时间:2021-12-24 16:50:37 其他开发

malloc 实现?

我正在尝试为 C 实现 malloc 和 free,但我不确定如何重用内存.我目前有一个 struct 看起来像这样: typedef struct _mem_dictionary {无效 *地址;size_t 大小;int释放;} mem_dictionary; 我的 malloc 看起来像这样: void *malloc(size_t size) {void *return_ptr = ..
发布时间:2021-12-24 16:49:43 其他开发

C:正确释放多维数组的内存

假设您有以下用于初始化多维数组的 ANSI C 代码: int main(){int i, m = 5, n = 20;int **a = malloc(m * sizeof(int *));//初始化数组for (i = 0; i 使用**a后,如何正确地从内存中释放它? [更新](解决方案) 感谢 Tim(和其他人)answer,我现在可以执行这样的函数来从我的多维数组中释放 ..
发布时间:2021-12-24 16:49:09 其他开发

一些分配器是懒惰的吗?

我在 Linux 中写了一个 C 程序,它 malloc 内存,循环运行,TOP 没有显示任何内存消耗. 然后我用那个内存做了一些事情,TOP确实显示了内存消耗. 当我 malloc 时,我真的“获得内存",还是有“懒惰"的内存管理,只有在/当我使用它时才给我内存? (还有一个选项,TOP只知道我使用时的内存消耗,所以我不确定这个..) 谢谢 解决方案 在 Linu ..
发布时间:2021-12-24 16:47:03 服务器开发

如何获取使用 malloc() 分配的内存块的大小?

可能的重复: 我怎样才能得到来自 C 中指针的数组的大小? 有吗有什么方法可以以编程方式确定 C++ 数组的大小?如果没有,为什么? 我从一个 C 风格的函数中得到一个指向一块已分配内存的指针.现在,为了调试目的,知道如何big 这个指针指向的分配内存块. 还有什么比盲目越界引发异常更优雅的事情吗? 提前致谢,安德烈亚斯 编辑: 我在 Windows 上使用 VC ..
发布时间:2021-12-24 16:46:06 C/C++开发

"new" 和有什么不一样?和“malloc"和“calloc"在 C++ 中?

“new"和“new"有什么区别?和“malloc"和“calloc";和其他家庭成员? (何时)除了“new"之外我还需要什么吗?? 其中一个是否使用其他实现? 解决方案 new 和 delete 是 C++ 特定的功能.它们在 C 中不存在. malloc 是老派的 C 做事方式.大多数情况下,您不需要在 C++ 中使用它. malloc 分配未初始化的内存.分配的内 ..
发布时间:2021-12-24 16:45:01 C/C++开发

malloc 可以分配的最大内存

我试图弄清楚我可以在我的机器上最大程度地分配多少内存(1 Gb RAM 160 Gb HD Windows 平台). 我读到 malloc 可以分配的最大内存仅限于物理内存(在堆上). 此外,当程序消耗的内存超过一定水平时,计算机会停止工作,因为其他应用程序没有获得它们所需的足够内存. 为了确认,我用C写了一个小程序: int main(){国际*p;而(1){p=(int * ..

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

我正在尝试在 C 中为 free 和 malloc 创建包装函数,以帮助通知我内存泄漏.有谁知道如何声明这些函数,所以当我调用 malloc() 和 free() 时,它会调用我的自定义函数而不是标准库函数? 解决方案 您有几个选择: 特定于 GLIBC 的解决方案(主要是 Linux).如果您的编译环境是 glibc 和 gcc,则首选方法是使用 malloc 钩子.它不仅可以让您 ..
发布时间:2021-12-24 16:40:43 其他开发