memory-management相关内容

关于 C/C++ 堆栈分配

在学习 C++(和 C)时,我对堆栈分配的工作有一些特别的疑问,但我找不到解决方案: 堆栈分配是否隐式调用 malloc/free 函数?如果不;如何保证栈分配和堆分配不冲突? 如果是的话;C++ 中的堆栈分配是否也隐式调用 new/delete?如果是;为一个类重载 new 运算符会影响它的堆栈分配吗? 它在 VC++ 中产生了令人困惑的结果;但由于 VC++ 并不完全符合标准 ..
发布时间:2022-01-22 12:22:29 C/C++开发

堆、堆栈、文本等不同的段与物理内存有何关系?

当编译 C 程序并创建目标文件 (ELF) 时.目标文件包含不同的部分,例如 bss、数据、文本和其他段.我知道 ELF 的这些部分是虚拟内存地址空间的一部分.我对吗?如果我错了,请纠正我. 另外,编译后的程序会有一个虚拟内存和页表.页表在加载程序时将 ELF 中存在的虚拟内存地址与实际物理内存地址相关联.我的理解正确吗? 我在创建的 ELF 文件中读到,bss 部分只保留未初始化的全 ..
发布时间:2022-01-22 12:20:24 其他开发

为什么堆上的内存分配比栈上慢得多?

我已经被告知很多次了.但我不知道为什么......从堆分配内存时涉及哪些额外成本?和硬件有关吗?它与CPU周期有关吗?这么多的猜测,但没有确切的答案......有人可以给我一些详细说明吗? 正如“unwind"所说,Heap 数据结构比 Stack 更复杂.在我看来,当线程开始运行时,一些内存空间作为它的堆栈分配给线程,而堆由进程内的所有线程共享.这种范式需要一些额外的机制来管理每个线程对共 ..
发布时间:2022-01-22 12:13:38 其他开发

为什么堆栈地址会朝着减少的内存地址增长?

我在教科书中读到堆栈通过减少内存地址而增长;即从高地址到低地址.这可能是一个糟糕的问题,但我没有正确理解这个概念.你能解释一下吗? 解决方案 首先,它依赖于平台.在某些架构中,堆栈是从地址空间的底部开始分配并向上增长的. 假设像 x86 这样的架构从地址空间的顶部向下堆栈,这个想法很简单: =============== 最高地址(例如 0xFFFF)|||堆栈 ||||----- ..
发布时间:2022-01-22 12:06:50 其他开发

C++ 中的堆栈或堆中的全局内存管理?

如果我在 C++ 应用程序中全局声明一个数据结构,它会消耗堆栈内存还是堆内存? 例如 结构 AAA{.../.../.../../..}arr[59652323]; 解决方案 由于我对答案不满意,并希望同样的 karjatkar 想要学习的不仅仅是简单的是/否答案,所以你去吧. 通常一个进程会分配5个不同的内存区域 代码 - 文本段 初始化数据——数据段 未初始化的数据 ..
发布时间:2022-01-22 12:02:18 C/C++开发

我的 cocos2d 应用程序每秒增加实际内存使用量是否正常?

我为 iPad 开发 cocos2d iOS 应用程序.当我测试内存泄漏和对象分配时,我的 Live Bytes 是稳定的,但是当我运行 Activity Monitor 时,我看到我的应用程序的实际内存使用量每秒增加 0.02MB. 我想问一下这正常吗,有没有人遇到过类似的问题? 解决方案 我记得我有这个问题是因为我记录了调试消息! 我以循环周期(每帧)记录此消息,这就是内存 ..
发布时间:2022-01-21 18:07:34 移动开发

不断增加应用程序内存 (IOAccelResource)

我正在努力解决一个问题(在 这个问题).上下文是:回合制游戏,使用 cocos2d 2.0 版开发,obj-c,无 ARC,目前正在准备 AppStore 更新以解决一些 iOS 7 问题(我的,不是 iOS7). 我自己的仪器,以及仪器,没有泄漏,没有废弃的内存,什么都没有……平坦.在 iOS 4、5、6.1 下也曾经出现过这种情况.然而,在我提交之前的测试概要中,在设备上进行分析时,我看 ..
发布时间:2022-01-21 17:15:42 移动开发

如何确定哪些对象持有对导致 Objective-c 内存泄漏的其他对象的引用?

我尝试使用泄漏工具,并“分析"等来查找泄漏,但找不到它.使用分配我可以确定没有被释放的对象. 我注意到(通过在 dealloc 方法中添加调试语句),不会为这些对象调用 dealloc. 如何确定哪些对象持有对这些对象的引用并阻止它们被释放? 解决方案 分析工具无法检测到问题.使用分配工具捕获所有引用计数是一个开始,但是有很多类我不认识或直接访问,我无法使用这种方法追踪问题.相 ..

C++ std::queue::pop() 调用析构函数.指针类型呢?

我有一个 std::queue,它被包装为一个模板类以创建一个线程安全的队列.我有这个类的两个版本:一个存储值类型,一个存储指针类型. 对于指针类型,我无法在销毁时删除队列中的元素.原因是我不知道如何安全地从队列中移除项目. 这个 参考状态(空洞,所以我猜它实际上不是状态它)从队列中删除元素的唯一方法是调用 pop().该参考资料还说 pop() 调用该项目的析构函数. 嗯,这会 ..
发布时间:2022-01-21 11:51:34 C/C++开发

获得随机 SIGTRAP 信号(在 MinGW-gdb 中)是否是内存损坏的标志?

我编写了自己的引用计数内存管理器 c++(为了好玩),我确信它并不完美;).现在,当我尝试使用它时,我得到了随机的 SIGTRAP 信号.如果我注释掉与该内存管理器相关的每一行,一切都会运行良好.获得 SIGTRAP-s 而不是 SIGSEGV 是很奇怪的.我知道当程序遇到断点时会抛出 SIGTRAP-s,但没有设置断点.我在另一个线程中读到,exe 和 dll 的调试版本必须是最新的.它们是最新 ..
发布时间:2022-01-20 20:51:25 C/C++开发

Linux 堆结构和 malloc() 和 free() 的行为

我有一个带有 Linux 2.6 内核的 D​​ebian,我尝试了解堆如何使用 malloc() 和 free() 工作/表现.我试图搜索 malloc() 和 free() 算法和堆结构,但找不到任何有用的东西.不幸的是,我对 Linux 和内存如何工作的了解太少,无法理解 free() 和 malloc() 的源代码. 这是一个示例代码: int main(int argc, cha ..
发布时间:2022-01-20 20:40:46 服务器开发

如何在运行时查看我的 C 程序的内存布局?

我想在 C 中查看我的程序的内存布局,以便我可以在运行时了解内存的所有不同部分,例如 BSS 或堆中的变化? 解决方案 在Linux中,对于进程PID,查看/proc/PID/maps和/proc/PID/smaps 伪文件.(进程本身可以使用/proc/self/maps和/proc/self/smaps.) 它们的内容记录在 man 5 proc 中. 这是一个示例,说明如 ..
发布时间:2022-01-20 20:18:45 服务器开发

在 VB6 应用程序中识别内存占用的工具

有哪些工具可用于将 VB6 应用程序中的内存消耗归因于它的多个组件?我可以通过查看各种计数器(私有字节、工作集等)来获取整个应用程序消耗的内存,例如,在 Process Explorer 中.我想更深入地了解运行时创建的各种组件或对象消耗了多少内存.例如,计算在运行时缓存数据的大型集合消耗了多少内存,以及它如何根据集合中元素的数量而变化. 解决方案 我不确定是否有任何公开可用的(免费)工具 ..
发布时间:2022-01-20 19:42:37 其他开发

uiwebview 和巨大的内存丢失

我在使用 UIWebViews 时遇到问题,我在这里看到了同样的问题,但没有有用的答案.问题在这里: UIWebView 内存管理 .我会引用它: 我正在开发一个大量使用 UIWebView 的应用程序.这个应用程序在从我的服务器加载内容时动态生成大量 UIWebView.其中一些 UIWebView 非常大,并且有很多图片. 如果我使用仪器检测泄漏,我不会检测到任何泄漏.但是,分配了 ..
发布时间:2022-01-19 22:08:25 移动开发