memory-management相关内容
在学习 C++(和 C)时,我对堆栈分配的工作有一些特别的疑问,但我找不到解决方案: 堆栈分配是否隐式调用 malloc/free 函数?如果不;如何保证栈分配和堆分配不冲突? 如果是的话;C++ 中的堆栈分配是否也隐式调用 new/delete?如果是;为一个类重载 new 运算符会影响它的堆栈分配吗? 它在 VC++ 中产生了令人困惑的结果;但由于 VC++ 并不完全符合标准
..
当编译 C 程序并创建目标文件 (ELF) 时.目标文件包含不同的部分,例如 bss、数据、文本和其他段.我知道 ELF 的这些部分是虚拟内存地址空间的一部分.我对吗?如果我错了,请纠正我. 另外,编译后的程序会有一个虚拟内存和页表.页表在加载程序时将 ELF 中存在的虚拟内存地址与实际物理内存地址相关联.我的理解正确吗? 我在创建的 ELF 文件中读到,bss 部分只保留未初始化的全
..
我已经被告知很多次了.但我不知道为什么......从堆分配内存时涉及哪些额外成本?和硬件有关吗?它与CPU周期有关吗?这么多的猜测,但没有确切的答案......有人可以给我一些详细说明吗? 正如“unwind"所说,Heap 数据结构比 Stack 更复杂.在我看来,当线程开始运行时,一些内存空间作为它的堆栈分配给线程,而堆由进程内的所有线程共享.这种范式需要一些额外的机制来管理每个线程对共
..
我在教科书中读到堆栈通过减少内存地址而增长;即从高地址到低地址.这可能是一个糟糕的问题,但我没有正确理解这个概念.你能解释一下吗? 解决方案 首先,它依赖于平台.在某些架构中,堆栈是从地址空间的底部开始分配并向上增长的. 假设像 x86 这样的架构从地址空间的顶部向下堆栈,这个想法很简单: =============== 最高地址(例如 0xFFFF)|||堆栈 ||||-----
..
如果我在 C++ 应用程序中全局声明一个数据结构,它会消耗堆栈内存还是堆内存? 例如 结构 AAA{.../.../.../../..}arr[59652323]; 解决方案 由于我对答案不满意,并希望同样的 karjatkar 想要学习的不仅仅是简单的是/否答案,所以你去吧. 通常一个进程会分配5个不同的内存区域 代码 - 文本段 初始化数据——数据段 未初始化的数据
..
我为 iPad 开发 cocos2d iOS 应用程序.当我测试内存泄漏和对象分配时,我的 Live Bytes 是稳定的,但是当我运行 Activity Monitor 时,我看到我的应用程序的实际内存使用量每秒增加 0.02MB. 我想问一下这正常吗,有没有人遇到过类似的问题? 解决方案 我记得我有这个问题是因为我记录了调试消息! 我以循环周期(每帧)记录此消息,这就是内存
..
..
我正在努力解决一个问题(在 这个问题).上下文是:回合制游戏,使用 cocos2d 2.0 版开发,obj-c,无 ARC,目前正在准备 AppStore 更新以解决一些 iOS 7 问题(我的,不是 iOS7). 我自己的仪器,以及仪器,没有泄漏,没有废弃的内存,什么都没有……平坦.在 iOS 4、5、6.1 下也曾经出现过这种情况.然而,在我提交之前的测试概要中,在设备上进行分析时,我看
..
我已经阅读了一些关于 ARC 的教程,但对属性声明仍然有些困惑.我使用以下模式编写了大部分代码: @property (readwrite, nonatomic) PlayerData* playerData;@property (readwrite, nonatomic) MusicLayer* musicLayer;@property (readwrite, nonatomic) bool
..
我尝试使用泄漏工具,并“分析"等来查找泄漏,但找不到它.使用分配我可以确定没有被释放的对象. 我注意到(通过在 dealloc 方法中添加调试语句),不会为这些对象调用 dealloc. 如何确定哪些对象持有对这些对象的引用并阻止它们被释放? 解决方案 分析工具无法检测到问题.使用分配工具捕获所有引用计数是一个开始,但是有很多类我不认识或直接访问,我无法使用这种方法追踪问题.相
..
..
我有一个 std::queue,它被包装为一个模板类以创建一个线程安全的队列.我有这个类的两个版本:一个存储值类型,一个存储指针类型. 对于指针类型,我无法在销毁时删除队列中的元素.原因是我不知道如何安全地从队列中移除项目. 这个 参考状态(空洞,所以我猜它实际上不是状态它)从队列中删除元素的唯一方法是调用 pop().该参考资料还说 pop() 调用该项目的析构函数. 嗯,这会
..
我编写了自己的引用计数内存管理器 c++(为了好玩),我确信它并不完美;).现在,当我尝试使用它时,我得到了随机的 SIGTRAP 信号.如果我注释掉与该内存管理器相关的每一行,一切都会运行良好.获得 SIGTRAP-s 而不是 SIGSEGV 是很奇怪的.我知道当程序遇到断点时会抛出 SIGTRAP-s,但没有设置断点.我在另一个线程中读到,exe 和 dll 的调试版本必须是最新的.它们是最新
..
..
我有一个带有 Linux 2.6 内核的 Debian,我尝试了解堆如何使用 malloc() 和 free() 工作/表现.我试图搜索 malloc() 和 free() 算法和堆结构,但找不到任何有用的东西.不幸的是,我对 Linux 和内存如何工作的了解太少,无法理解 free() 和 malloc() 的源代码. 这是一个示例代码: int main(int argc, cha
..
我想在 C 中查看我的程序的内存布局,以便我可以在运行时了解内存的所有不同部分,例如 BSS 或堆中的变化? 解决方案 在Linux中,对于进程PID,查看/proc/PID/maps和/proc/PID/smaps 伪文件.(进程本身可以使用/proc/self/maps和/proc/self/smaps.) 它们的内容记录在 man 5 proc 中. 这是一个示例,说明如
..
有哪些工具可用于将 VB6 应用程序中的内存消耗归因于它的多个组件?我可以通过查看各种计数器(私有字节、工作集等)来获取整个应用程序消耗的内存,例如,在 Process Explorer 中.我想更深入地了解运行时创建的各种组件或对象消耗了多少内存.例如,计算在运行时缓存数据的大型集合消耗了多少内存,以及它如何根据集合中元素的数量而变化. 解决方案 我不确定是否有任何公开可用的(免费)工具
..
如何在 VB 6 代码中获取 CPU 和内存使用情况?谢谢! 解决方案 确定当前机器上的 CPU 使用率 声明 选项显式' 请注意,如果将 lpData 参数声明为 String,则' 必须按值传递.私有声明函数 RegQueryValueEx Lib“advapi32.dll"_别名“RegQueryValueExA"(ByVal hKey As Long,ByVal lpV
..
我正在尝试释放 UIWebView 对象,但它没有释放内存.有什么原因吗? 解决方案 也许清除缓存可能有帮助?参见 NSURLCache 类.
..
我在使用 UIWebViews 时遇到问题,我在这里看到了同样的问题,但没有有用的答案.问题在这里: UIWebView 内存管理 .我会引用它: 我正在开发一个大量使用 UIWebView 的应用程序.这个应用程序在从我的服务器加载内容时动态生成大量 UIWebView.其中一些 UIWebView 非常大,并且有很多图片. 如果我使用仪器检测泄漏,我不会检测到任何泄漏.但是,分配了
..