memory-management相关内容
..
我想知道常量变量存储在哪里.它和全局变量在同一个内存区域吗?还是在堆栈上? 解决方案 它们的存储方式是一个实现细节(取决于编译器). 例如,在 GCC 编译器中,在大多数机器上,只读变量、常量和跳转表都放在文本部分.
..
我对 Julia 中的内存分配有点困惑.我从常见问题解答中知道已完成清除大变量使用的内存通过将其设置为较小的值(如 0),然后运行 gc(). 但是,我对以下内容有些困惑.我创建了一个随机 Float32 数组: @time A = rand(Float32, 10000, 10000); time 表示分配了大约 400MB 的 RAM,Julia 的 RAM 使用量增加了 400
..
例子: - (NSString*) 标题 {返回[[标题保留]自动释放];} setter 实际上已经保留了它,对吧?实际上没有人应该绕过 Setter ......所以我想知道为什么 getter 不只是返回对象?它实际上已经保留了.或者如果同时另一个对象被传递给设置器,是否需要这样做? 解决方案 从这里 http://www.macosxguru.net/article.php?s
..
我在视图控制器中有一个 UIWebView,它有以下两种方法.问题是如果我在第二个线程完成之前弹出(点击导航栏)这个控制器,应用程序将在 [super dealloc] 之后崩溃,因为“试图从主线程以外的线程获取网络锁或web 线程.这可能是从辅助线程调用 UIKit 的结果.".任何帮助将不胜感激. -(void)viewDidAppear:(BOOL)animated {[超级viewWil
..
在很多情况下,人们会分配一个实例,并在它被分配给其他东西后立即释放它,它会在内部保留它. 例如, UIView *view = [[UIView alloc] initWithFrame...];[自我添加子视图:视图];[查看发布]; 我听说有人建议我们使用自动释放而不是立即释放. 所以上面变成了: UIView *view = [[[UIView alloc] initW
..
所以,这是我的 cellForRowAtIndexPath 的代码: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{UITableViewCell *cell = [tableView dequeueReusableCellWithIde
..
正确的例子: - (void)dealloc {[viewController 发布];[窗口释放];[超级释放];} 错误的例子: - (void)dealloc {[超级释放];[viewController 发布];[窗口释放];} Although 在几乎所有其他情况下,当覆盖一个方法时,我会首先调用 super 的方法实现,在这种情况下,Apple 总是在最后调用 [super
..
我的应用程序下面有一个可能非常大的 CoreData 数据存储(可能很容易超过 30MB).在使用自动迁移 (addPersistentStoreWithType:configuration:URL:options:error:) 时,我开始注意到内存问题,因此我开始研究迁移存储的较小部分以避免所有 CoreData 的方法一次迁移所有内容时发生的对象堆积. 这在 official文档 在“
..
在允许用户显示复杂位置点列表的 GPS 应用中,我们在各种不同类型的地图上称为轨迹,每个轨迹可以包含 2k 到 10k 个位置点.当在非 Google 地图类型上呈现时,轨道会被大量剪辑、修剪和路径简化.这是为了降低内存使用率并提高性能.即使在最坏的情况下,我们通常也只会向 OpenGL 管道提交远少于一千个(聚合)转换后的位置点. 在集成适用于 iOS 的 Google Maps SDK
..
在编码时,我们是否应该考虑对堆栈上创建的变量的总大小进行一些限制?如果是,我们应该在什么基础上做出决定?它是否依赖于操作系统、内存可用性等?是否有任何编译器选项可以检查这一点? 任何指向方向的指针也会有所帮助. 解决方案 这是 C 标准中用户不太友好的领域之一. 这完全依赖于实现,而且几乎不可能“正确"地做到这一点.C 标准不保证您可以在不破坏堆栈的情况下定义哪些自动变量,或者
..
我有一个对象(A),它有一个由对象(B)组成的列表.list(B) 中的对象是指针,但列表本身应该是指针吗?我正在从 Java 迁移到 C++,但还没有完全习惯堆栈/堆.该列表不会传递到 A 类之外,只会传递列表中的元素.为了以防万一,将列表本身分配在堆上是一种好习惯吗? 另外,包含 list(A) 的类也应该在堆上吗?和列表一样,不会被传递. 解决方案 记住 只有当 Obje
..
我正在使用 DevStudio 在 Windows 上以非托管的 C/C++ 进行开发. 我想在堆栈而不是堆上分配一些内存,因为我不想手动释放该内存(我知道智能指针和所有这些东西.我有一个非常具体的内存案例我需要处理的分配),类似于使用 A2W() 和 W2A() 宏. _alloca 会这样做,但已被弃用.建议改用 malloca.但是 _malloca 文档说每次调用 _mallo
..
我在此演示文稿中读到 http://golang.org/doc/ExpressivenessOfGo.pdf第 42 页: 安全 - 没有堆栈溢出 这怎么可能?和/或 Go 如何避免这种情况? 解决方案 这是一个叫做“segmented stacks"的特性:每个goroutine都有自己的栈,在堆上分配. 在最简单的情况下,编程语言实现对每个进程/地址空间使用一
..
只是对此感到好奇.以下是同一功能的两个代码片段: void MyFunc1(){诠释 i = 10;对象 obj = null;如果(某事)返回;} 另外一个是…… void MyFunc1(){如果(某事)返回;诠释 i = 10;对象 obj = null;} 现在第二个有没有在 something 为真时不分配变量的好处?或者总是在调用函数后立即分配本地堆栈变量(在当前范围内)并且将
..
我正在尝试了解堆栈对齐的工作原理,如 什么是“堆栈对齐"中所述? 但我很难找到一个小例子来证明上述行为.我正在检查我的函数 foo 的堆栈分配: void foo() {整数a = 0;字符 b[16];b[0] = 'a';} 我用 gcc -ggdb example.c -o example.out 编译了源文件(即没有任何编译器标志),gdb 的汇编程序转储如下: (gdb) 反汇编
..
我对以下 C 代码有疑问: void my_function(){诠释 i1;诠释 j1;//做一点事...如果 (check_something()){诠释 i2;诠释 j2;//做其他事情...}//做更多的事情...} 是否有关于何时为 i2 和 j2 分配/释放堆栈空间的保证,或者它是否取决于编译器?我希望堆栈指针在 i2 和 j2 进入范围时向下调整,并在它们超出范围时向上调整,但随
..
我听说过关于动态的确切含义的相互矛盾的事情,以及自动的内存分配.我听说堆栈被称为自动内存分配和动态内存分配.我可以看到两者,因为堆栈内存块大小是在程序执行之前确定的,因此它的最大大小在运行时不会增长.然而,在程序执行期间,随着函数数据被压入和弹出堆栈,堆栈会不断地增长和缩小. 那么从这个意义上说,这不是动态内存分配吗? 如果是,那么仅将堆称为动态的不是令人困惑吗? 有人可以帮我澄
..
我正在编写一个项目(用 Java 编写),教授说我们不允许使用超过 200m 的类我使用 -Xmx50m 将堆栈内存限制为 50m(绝对确定),但根据顶部,它仍在使用 300m 我尝试运行 Eclipse 内存分析器,它只报告 26m 这可能都是堆栈上的内存吗?我很确定我永远不会超过大约 300 个方法调用深度(是的,这是一个递归 DFS 搜索),所以这意味着每个堆栈帧都在使用几乎是一
..
在设计 C 接口时,通常只让用户程序知道的内容进入公共接口 (.h). 因此,例如,如果用户程序不需要知道结构的内部组件,则它们应该保持隐藏.这确实是一种很好的做法,因为结构的内容和行为将来可能会发生变化,而不会影响界面. 实现该目标的一个好方法是使用不完整类型. typedef struct foo opaqueType; 现在可以构建一个只使用指向 opaqueType
..