草庐IT

c# - 检测何时即将耗尽内存(获取 "free physical memory"的数量)

我正在将图像从高FPS相机传输到内存缓冲区(列表)中,由于这些图像非常大,计算机很快就会耗尽内存。我想做的是在应用程序耗尽内存之前停止传输。在我的测试中,我发现它与接近于零的“可用物理内存”指标一致。现在的问题是我无法找到以编程方式实际获取此值的方法;在XP中,它甚至不会显示在任何地方(仅在Vista/7任务管理器中)。我已经尝试了所有我能找到的方法(WMI、性能计数器、MemoryStatus......),但我从中得到的只是“可用物理内存”,这当然不一样。有什么想法吗?更新不幸的是,我需要将数据放在内存中(是的,我知道我不能保证它会在物理内存中,但仍然如此),因为数据是实时流式传输

c++ - 为什么在分配有 'new' 的指针上调用 free() 会导致堆损坏?

它是否真的在某些编译器/机器上工作,但在其他编译器/机器上会导致堆损坏和崩溃?有人知道幕后发生了什么吗? 最佳答案 当您使用delete时,C++想要在对象上调用析构函数,但是将它传递给free不允许这种情况发生。如果对象包含其他对象,那么这些对象的析构函数也不会被调用。如果对象中有指针,那么这些指针就不会被释放。此外,C++的new和delete实际上可以从malloc请求更多的内存,并将额外的内存用于记账(例如存储析构函数的地址),因此您传递给free的指针实际上不会是malloced。

c - glib 内存分配 VS std *alloc 和 free

我倾向于在我的C程序中使用std*alloc/free函数来分配/释放动态内存。我想知道是否有任何好的理由使用GLIBMemoryAllocationfunctions而不是标准的。如果社区能指出这些解决方案中的任何一个是赢家/输家的情况,我将不胜感激。我还对使用其中一个可能会遇到的性能问题感兴趣。谢谢!编辑到国家平台这些程序通常在所有类型的Linux/Unix发行版上运行,通常是使用gcc4.2编译的64位拱门。 最佳答案 在我看来,GLib函数和标准库函数之间最有值(value)的区别在于,如果分配失败,GLib函数会中止程序。

c++ - 有没有办法减少 ostringstream malloc/free 的?

我正在编写一个嵌入式应用程序。在某些地方,我经常使用std::ostringstream,因为它对我的目的非常方便。但是,我刚刚发现性能受到极大影响,因为向流中添加数据会导致对malloc和free的大量调用。有什么办法可以避免吗?我的第一个想法是将ostringstream设为静态并使用ostringstream::set("")重置它。但是,这无法完成,因为我需要这些函数是可重入的。 最佳答案 好吧,Booger的解决方案是切换到sprintf()。它不安全且容易出错,但通常速度更快。但并非总是如此。初始化后,我们不能在我的实时

c++ - 如果通过委托(delegate)给 `free` 的重载 `new[]` 分配内存,那么 `malloc` 内存是否安全?

我的问题与Isitsafeto`free()`memoryallocatedby`new`?不重复.我正在为POD编写一个玩具垃圾收集器,我在其中定义了我自己的自定义operatornew/new[]和operatordelete/delete[].代码如下:#include#includestd::mapmemory;//globallyallocatedmemorymapstructcollect_t{}collect;//tagforplacementnewvoid*operatornew(std::size_tsize,constcollect_t&){void*addr=ma

c++ - 什么是 glibc free/malloc/realloc invalid next size/invalid pointer error 以及如何修复它?

您很可能会看到此问题,因为您的问题已作为此问题的拷贝关闭。有关中等完整的相关问题列表,请参阅MetaStackOverflow上的Alonglistofpossibleduplicates— Cmemoryallocationandoverrunningbounds。示例问题来自freechar*:invalidnextsize(fast)由noobie在2014-04-11询问。我在连接过程后释放char*,但收到此错误:free():invalidnextsize(fast):0x0000000001b86170这是我的代码:voidconcat(stringList*list){

c - 释放分配的内存 : realloc() vs. free()

所以我用malloc()分配了一block内存,后来用realloc()进行了更改。在我的代码中的某个时刻,我想清空它,我的意思是本质上给它的内存为0。这可以直观地使用realloc(pointer,0)完成。我在这里读到这是实现定义的,不应使用。我应该改用free(),然后再做一个malloc()? 最佳答案 这取决于你的意思:如果你想清空已使用的内存,但仍然可以访问该内存,那么你使用memset(pointer,0,mem_size);,将所述内存重新初始化为零。如果您不再需要该内存,则只需调用free(pointer);,这将

ios - Xcode - 我的应用程序崩溃,错误是 "Invalid pointer dequeued from free list *** set a breakpoint in malloc_error_break to debug"

我的应用在模拟器上运行完美。但是当我在设备上运行它时,应用程序崩溃并显示错误:"malloc:*errorforobject0x17415d0c0:Invalidpointerdequeuedfromfreelist*setabreakpointinmalloc_error_breaktodebug";我在malloc_error_break中搜索并设置了一个断点进行调试,但还是找不到问题所在。我试图改变项目的方案,启用僵尸对象,但找不到答案。我也尝试使用乐器,但我不擅长。 最佳答案 我已经在iOS8.3上使用Xcode8修复了这个

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

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

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

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