草庐IT

malloc_ptr_t

全部标签

Git 克隆因内存不足错误而失败 - "fatal: out of memory, malloc failed (tried to allocate 905574791 bytes)/fatal: index-pack failed"

我正在尝试将大型(1.4GB)Git存储库克隆到具有384MBRAM的32位DebianVM。我正在使用Git1.7.2.5,并使用SSH协议(protocol)进行克隆('gitcloneuser@host.com:/my/repo')克隆失败并显示以下消息:remote:Countingobjects:18797,done.remote:warning:subobtimalpack-outofmemoryremote:Compressingobjects:100%(10363/10363),done.fatal:outofmemory,mallocfailed(triedtoall

c - malloc() 和 free() 在哪里存储分配的大小和地址?

malloc()和free()在哪里存储分配的地址及其大小(LinuxGCC)?我读过一些实现将它们存储在实际分配的内存之前的某个位置,但我无法在我的测试中确认这一点。背景,也许有人对此有另一个提示:我正在尝试分析一个进程的堆内存,以确定另一个进程中字符串的当前值。访问进程堆内存并浏览它是没有问题的。但是,由于字符串的值发生变化,并且进程每次都分配新的内存部分,因此字符串的地址发生了变化。因为字符串具有固定格式,仍然很容易找到,但经过一些更改后,字符串的旧版本仍在堆内存中(可能已释放,但仍未重用/覆盖),因此我无法判断哪个字符串是当前字符串。所以,为了仍然找到当前字符串,我想通过将其地

c - 如何正确处理 C 中的 malloc 失败,尤其是当有多个 malloc 时?

假设这是我的代码的一部分:intfoo(){char*p,*q;if((p=malloc(BUFSIZ))==NULL){returnERROR_CODE;}if((q=malloc(BUFSIZ))==NULL){free(p)returnERROR_CODE;}/*Dosomeotherwork...*/free(p);free(q);}由于第一个malloc可能成功但第二个失败,我在第二个“错误处理程序”中使用free(p)。但是如果有更多的malloc,如果我想修改代码(调整它们的顺序,添加或删除一些malloc)怎么办?我知道在C++中有诸如RAII和异常安全之类的东西。但总

c - free 和 malloc 在 C 中是如何工作的?

我试图弄清楚如果我尝试“从中间”释放指针会发生什么比如看下面的代码:char*ptr=(char*)malloc(10*sizeof(char));for(chari=0;i我遇到了一个带有未处理异常错误消息的崩溃。我想了解free为什么以及如何工作,这样我不仅知道如何使用它,还能够理解奇怪的错误和异常,并更好地调试我的代码ץ非常感谢 最佳答案 当你malloc一个block时,它实际上分配的内存比你要求的多一点。这个额外的内存用于存储信息,例如分配block的大小,以及到block链中下一个空闲/使用block的链接,有时还有一些

c - 我什么时候应该在 C 中使用 malloc,什么时候不应该?

我了解malloc()的工作原理。我的问题是,我会看到这样的事情:#defineA_MEGABYTE(1024*1024)char*some_memory;size_tsize_to_allocate=A_MEGABYTE;some_memory=(char*)malloc(size_to_allocate);sprintf(some_memory,"HelloWorld");printf("%s\n",some_memory);free(some_memory);为了简洁起见,我省略了错误检查。我的问题是,您不能通过初始化指向内存中某个静态存储的指针来完成上述操作吗?也许:char*

c - malloc() 是如何在内部实现的?

这个问题在这里已经有了答案:Howdomalloc()andfree()work?(13个回答)关闭9年前。谁能解释一下malloc()在内部是如何工作的?我有时会做straceprogram并且我看到很多sbrk系统调用,做mansbrk谈论它被用于malloc()但仅此而已。 最佳答案 sbrk系统调用移动数据段的“边界”。这意味着它移动了程序可以读取/写入数据的区域的边界(让它增长或缩小,尽管AFAIKnomalloc确实使用该方法将内存段返回给内核)。除此之外,还有mmap用于将文件映射到内存,但也用于分配内存(如果您需要分

c++ - 我怎么知道谁持有 shared_ptr<>?

我使用boost::shared_ptr在我的C++应用程序中。内存问题真的很严重,应用程序占用大量内存。但是,因为我将每个新对象放入shared_ptr,当应用程序退出时,不会检测到内存泄漏。必须有std::vector>之类的东西持有资源的池。我怎么知道谁持有shared_ptr,什么时候调试?很难逐行查看代码。代码太多... 最佳答案 仅通过查看shared_ptr,您无法知道“兄弟指针”在哪里。您可以测试一个是否为unique()或获取use_count(),其中othermethods.

c++ - 为什么 new()/delete() 比 malloc()/free() 慢?

为什么new()/delete()比malloc()/free()慢?编辑:感谢到目前为止的回答。请指出标准C++实现new()和delete()的规范,谢谢! 最佳答案 看这段C代码:structdata*pd=malloc(sizeof(structdata));init_data(pd);C++中的new操作符本质上是在做上面这段代码所做的事情。这就是它比malloc()慢的原因。delete也是如此。它的作用与此相同:deinit_data(pd);free(pd);如果构造函数和析构函数为空(如内置函数),new和dele

c++ - 在库的公共(public)接口(interface)中使用 boost::shared_ptr

我们有一个C++库,我们提供给几个不同的客户。最近,我们从在公共(public)接口(interface)中使用原始指针切换到使用boost::sharedptr。正如您可能猜到的那样,这提供了巨大的好处,因为现在客户不再需要担心谁需要删除什么以及何时删除。当我们进行转换时,我认为这是正确的做法,但让我感到困扰的是,我们必须在我们的公共(public)界面中包含来自第三方库的东西——通常,如果可以的话,你会避免这种事情。我合理化了boost现在实际上是C++语言的一部分,我们的用例要求客户端代码和库都保存指向对象的指针。然而最近我们的一个客户问我们是否可以切换到在接口(interfac

c++ - 在 VS1012 中使用 std::move 将 std::unique_ptr 发送到 std::thread

在VisualStudio2012中出现以下错误。voiddo_something(std::unique_ptri);std::unique_ptri(newint);std::thread(do_something,std::move(i));Error3errorC2248:'std::unique_ptr::unique_ptr':cannotaccessprivatememberdeclaredinclass'std::unique_ptr'c:\programfiles(x86)\microsoftvisualstudio11.0\vc\include\functional