草庐IT

c++ - 如何跨 DLL 边界跟踪内存

我想要高性能的运行时内存指标,所以我编写了一个基于重载new和delete的内存跟踪器。它基本上可以让您在堆中进行分配并分析有关它们的所有内容-碎片、大小、时间、数量、调用堆栈等。但是,它有2个致命缺陷:它无法跟踪在其他DLL中分配的内存以及何时拥有对象传递给DLL,反之亦然。还有一些较小的缺陷:如果用户使用malloc而不是new,则它是未被跟踪的;或者如果用户定义了一个类new/delete。如何消除这些缺陷?我想我一定是通过重载new/delete从根本上错误地解决了这个问题,有没有更好的方法? 最佳答案 实现这一点的正确方法

c++ - 如何从 operator new 或 malloc 为 mremap 获取页对齐内存

有没有办法分配一block内存,使其起始地址与给定的页面大小对齐?请注意,我不想在分配block后计算对齐地址。原因是在某些时候我将不得不在block上调用mremap():mremap要求旧地址参数是页面对齐的。 最佳答案 mremap只能安全地用于由mmap分配的内存区域,这些内存区域本质上是页面对齐的。在其他任何事情上使用它都是危险的(正式的,未定义的行为)并且可能看起来有效但可能会以您不会立即看到的方式严重破坏事物。 关于c++-如何从operatornew或malloc为mre

c++ - 如何检查内存限制

我正在尝试检查操作系统中的内存限制是否有效。所以我正在使用这个简单的C程序:#include#includeintmain(){constsize_tGB=1024*1024*1024;constsize_tmem=1*GB;std::cout>a;free(p);}我正在使用-O0进行编译,但是当我查看性能监视器时,我发现我的a.out仅使用了128Kb。为什么我看不到1GB? 最佳答案 你需要提交内存。只要你只保留它,你就分配了“虚拟内存”。您promise读取或写入内存。使用您的程序只需添加void*p=malloc(mem)

c++ - C++ 中 SSE 的内存对齐,_aligned_malloc 等效?

我想知道如何将此C代码转换为C++以实现内存对齐。float*pResult=(float*)_aligned_malloc(length*sizeof(float),16);我看过here然后我试了这个float*pResult=(float*)__attribute__((aligned(16)));还有这个float*pResult=__attribute__((aligned(16)));但两者都给出了类似的错误。error:expectedprimary-expressionbefore'__attribute__'|error:expected','or';'before'

c++ - 如何包装 posix_memalign(在 mac 上编译旧代码库)?

我正在尝试在mac上编译一个工具包。它引用了malloc.h的memalign函数,但我能找到的唯一用于mac的关闭函数是posix_memalign。所以我试图将posix_memalign包装成看起来像memalign。我对如何做到这一点感到有点困惑(因为void*和void**指针):posix_memalign的签名是intposix_memalign(void**memptr,size_talignment,size_tsize);memalign的签名是:void*memalign(size_tblocksize,size_tbytes);非常感谢任何指点。(蹩脚的双关语意

c++ - MicroBlaze 上 C++ 的线程安全

有没有人为MicroBlaze编写过多线程C++应用程序?Xilinx文档指出:ThestandardClibraryprovidedwithEDKisnotbuiltforamulti-threadedenvironment.STDIOfunctionslikeprintf(),scanf()andmemorymanagementfunctionslikemalloc()andfree()arecommonexamplesoffunctionsthatarenotthread-safe.WhenusingtheClibraryinamulti-threadedenvironment,

c++ - 在 C++ 中用 new/delete 替换 malloc/free

我只是想确定一下。这是我的代码int*Image=(int*)malloc(sizeof(int)*m_Width/2*m_Height);free(Image);如果我想使用new而不是malloc和free而不是delete。这是我写的int*Image=newint[m_Width/2*m_Height];delete[]Image;对吗? 最佳答案 从技术上讲,这是正确的。然而,这是我们正在谈论的C++,动态分配数组的C++方法是使用std:vector代替:std::vectorImage(m_Width/2*m_Heig

c++ - 如何在 Linux 中重新定义 malloc() 以便在 C++ 中使用 new

我有一个为我定义的mem_malloc()和mem_free(),我想用它们来替换malloc()和free(),从而替换C++的new和delete。我定义它们如下:extern"C"{externvoid*mem_malloc(size_t);externvoidmem_free(void*);void*malloc(size_tsize){returnmem_malloc(size);}voidfree(void*memory){mem_free(memory);}}但是,我收到两个链接错误:[user@machinetest]$g++-m32-pthreadmain.cpp-s

c++ - c++ 中的 malloc/free 和 new/delete 兼容性?

malloc/free和new/delete有一个很好的比较here,以及malloc()和free()如何工作的很好的解释here.显然,我们不会混合使用它们-将free与new一起使用或将delete与malloc一起使用。我们可以看到很多开源项目,有很多贡献者,使用这两种机制,同时遵守上述“禁止混合”规则。通常,您在一个文件中只有一种方式(一位作者,一种偏好)。我已经fork了这样一个项目,我正在使用new/delete添加一些功能。但是我遇到了一些奇怪的内存损坏。当然,我可能对他们负责,但是.....这让我问了一些“幼稚”的问题:我可以在同一个编译单元(*.o)中同时使用mal

C++ 异常和信号处理程序

我正在阅读BjarneStroustrup所著的C++的设计与演化。关于异常处理和异步信号,如下所述:Canexceptionsbeusedtohandlethingslikesignals?AlmostcertainlynotinmostCenvironments.ThetroubleisthatCusesfunctionslikemallocthatarenotre-entrant.Ifaninterruptoccursinthemiddleofmallocandcausesanexception,thereisnowaytopreventtheexceptionhandlerfr