我知道操作系统有时会使用某些模式(如0xCD和0xDD)初始化内存.我想知道的是何时以及为什么会发生这种情况.
这是否特定于编译器使用?
对于这个,malloc/new和free/delete的工作方式是否相同?
它是特定于平台的吗?
它会出现在其他操作系统上,例如Linux或VxWorks吗?
我的理解是这只发生在Win32调试配置中,它用于检测内存溢出并帮助编译器捕获异常.
你能举一个关于这个初始化如何有用的实际例子吗?
我记得读过一些东西(可能在Code Complete 2中),在分配内存时将内存初始化为已知模式是好的,某些模式会触发Win32中的中断,这将导致调试器中出现异常.
这有多便携?
C++中delete和delete[]运算符有什么区别?
我正在努力完成这个难题.
__strong是所有Objective-C可保留对象指针的默认值,如NSObject,NSString等.这是一个强大的参考.ARC -release在范围的末尾与a平衡.
__unsafe_unretained等于旧的方式.它用于弱指针而不保留可保留对象.
__weak就像__unsafe_unretained不同之处在于它是一个自动归零弱引用这意味着该指针将零一旦引用的对象被释放被设置为.这消除了悬空指针和EXC_BAD_ACCESS错误的危险.
但到底有什么__autoreleasing好处呢?我很难找到关于何时需要使用此限定符的实际示例.我相信它只适用于期望指针指针的函数和方法,例如:
- (BOOL)save:(NSError**);
Run Code Online (Sandbox Code Playgroud)
要么
NSError *error = nil;
[database save:&error];
Run Code Online (Sandbox Code Playgroud)
在ARC下必须以这种方式声明:
- (BOOL)save:(NSError* __autoreleasing *);
Run Code Online (Sandbox Code Playgroud)
但这太模糊了,我想完全理解为什么.我找到的代码片段将__autoreleasing放在两颗星之间,这对我来说很奇怪.类型是NSError**(一个指针指向NSError),那么为什么要放在__autoreleasing星星之间而不是简单地放在前面NSError**呢?
此外,可能还有其他必须依赖的情况__autoreleasing.
我是iOS5开发新手并使用objective-c.我无法理解强存储和弱存储之间的区别.我已经阅读了文档和其他SO问题,但它们听起来与我完全相同,没有进一步的见解.
我阅读了文档:Transitioning To ARC - 它引用了iOS4的retain,assign和release条件; 这让我很困惑.然后我看看Open U CS193p,它区分强弱:
强者:"把它保持在堆中,直到我不再指向它为止"
弱:"只要别人强烈地指出它就保持这种状态"
是不是两个定义相同=如果指针不再指向一个对象,那么释放持有该对象的内存?我理解指针,堆,分配或释放内存的概念 - 但强弱之间有什么区别?
C++完全是关于内存所有权
Aka" Ownership Semantics "
一块动态分配的内存的所有者负责释放该内存.所以这个问题真的变成了拥有记忆的人.
在C++中,所有权都是由RAW指针包含在内部的类型记录的,因此在一个好的(IMO)C++程序中,很少见[RARE并非永远]看到RAW指针传递(因为RAW指针没有推断的所有权因此我们不能告诉谁拥有记忆,因此如果没有仔细阅读文件,你无法分辨谁负责所有权).
相反,很少看到RAW指针存储在类中,每个RAW指针都存储在自己的SMART指针包装器中.(注意:如果你没有一个对象,你不应该存储它,因为你不知道什么时候它会超出范围并被销毁.)
所以问题是:
让我们为每个答案保留一种语义所有权,这样他们就可以单独上下投票
从概念上讲,智能指针很简单,而且简单易用.我已经看过许多尝试过的实现,但总是以某种方式打破它们,这对于随意使用和示例来说并不明显.因此,我建议始终使用经过良好测试的"智能指针",而不是自己动手.std :: auto_ptr或其中一个提升智能指针似乎涵盖了我的所有需求.
单身人士拥有该物品.
但允许转让所有权.
用法:
======
这允许您定义显示所有权显式转移的接口.
单身人士拥有该物品.
不允许转让所有权.
用法:
======
用于显示明确的所有权.
对象将被析构函数或显式重置时销毁.
多个所有权.
这是一个简单的引用计数指针.当引用计数达到零时,对象被销毁.
用法:
======
当对象可以有多个owers,其生命周期无法在编译时确定.
与shared_ptr <T>一起使用.
在指针循环可能发生的情况下.
用法:
======
用于在仅循环维护共享引用计数时停止保留对象的周期.
new/delete据说动态分配在免费商店中进行,
而malloc/free操作则使用堆.
在实践中,我想知道是否存在实际差异.
编译器是否区分了这两个术语?(免费商店和堆,不new/malloc)
我向你保证,我确实在我的问题中寻找答案,但没有一个是有帮助的.在这里,我得到了一个简单的代码,它应该UIImagePickerController在一个UIPopoverController:
-(void)takePicture:(id)sender{
UIImagePickerController *picker=[[UIImagePickerController alloc] init];
picker.delegate=self;
picker.sourceType=UIImagePickerControllerSourceTypeCamera;
picker.allowsEditing=YES;
UIPopoverController *poc=[[UIPopoverController alloc]
initWithContentViewController:picker];
[poc presentPopoverFromBarButtonItem:bbItem
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:NO];
}
Run Code Online (Sandbox Code Playgroud)
现在,即使从我第一次[UIPopoveController dealloc]到达时...错误和程序崩溃.根据ARC,我没有做任何保留,重新发布或自动释放.UIPopoverControllers当受益于ARC时,有什么特别的考虑吗?
memory-management uipopovercontroller ios automatic-ref-counting
我已经使用Android Studio 3个月了,我开始使用的其中一个应用程序变得相当大.程序右下方显示的内存使用情况表明我分配的堆最大值为494M.

当我开始更改XML文件时,我的内存使用量很快达到上限,并且IDE崩溃时出现Out Of Memory错误.

我试图用这个增加堆大小,但到目前为止没有任何影响.
我已经看了几十篇关于如何增加堆大小的文章和其他问题,但他们的答案都没有奏效.无论我对VMOPTIONS或IDE设置做什么,堆大小都不会增加.我相信我正在为VMOPTIONS编辑正确的文件,因为如果我故意给它一个无效的命令Android Studio抱怨它并且不启动.
我正在使用Windows 7 - 64位并拥有16GB RAM.Android Studio有没有其他人遇到此问题?你能解决它吗?
crash android memory-management out-of-memory android-studio
我最近一直在阅读java中的内存分配方案,并且由于我从各种来源阅读,因此有很多疑问.我已经收集了我的概念,并且我会要求完成所有要点并对它们进行评论.我开始知道内存分配是特定于JVM的,所以我必须事先说,我的问题是Sun特定的.
谢谢你经历这个!