我正在准备一些C语言培训材料,我希望我的示例能够适合典型的堆栈模型。 在Linux,Windows,Mac OSX(PPC和x86),Solaris和最新的Unix中,C堆栈的发展方向是什么?
忽略编程风格和devise,调用堆栈上分配的variables是否是“安全的”? 例如: int nAmount; delete &nAmount; 要么 class sample { public: sample(); ~sample() { delete &nAmount;} int nAmount; }
有人告诉我可以将-XX:+HeapDumpOnOutOfMemoryError参数添加到我的JVM启动选项中,以便在我们的应用程序中出现内存不足错误时,启动JBoss启动脚本以获得堆转储。 我想知道这些数据在哪里被丢弃? 只是对控制台,或一些日志文件? 如果仅仅是控制台,如果我没有通过控制台login到Unix服务器呢?
我已经编程了一段时间,但主要是Java和C#。 我从来没有必要自己pipe理记忆。 我最近开始使用C ++进行编程,对于什么时候应该将东西存储在堆栈以及何时将其存储在堆中,我有点困惑。 我的理解是,被频繁访问的variables应该被保存在堆栈中,对象,很less使用的variables和大型的数据结构都应该被保存在堆中。 这是正确的还是我不正确?
我在Visual Studio 2008下debugging了一个(本地)multithreadingC ++应用程序。在看似随意的场合,我得到一个“Windows引发了一个断点…”的错误,并注意到这可能是由于堆。 这些错误不会总是使应用程序崩溃,尽pipe它很可能会在之后崩溃。 这些错误的主要问题是,只有在实际发生了腐败之后才会popup,这使得它们非常难以跟踪和debugging,特别是在multithreading应用程序中。 什么样的事情会导致这些错误? 我如何debugging它们? 提示,工具,方法,启示…是受欢迎的。
当我运行时,每次我尝试运行该程序时,都会重复出现以下exception。 VM初始化期间发生错误 无法为对象堆预留足够的空间 无法创buildJava虚拟机。 我试图增加我的虚拟内存(页面大小)和内存大小,但无济于事。 谁能告诉我如何消除这个错误?
我曾经听说过在C ++dynamic内存分配的环境中使用了几次“内存碎片”。 我发现了一些关于如何处理内存碎片的问题,但是找不到直接处理内存的问题。 所以: 什么是内存碎片? 如何判断内存碎片对我的应用程序是否有问题? 什么样的节目最有可能遭受? 处理内存碎片的常见方法是什么? 也: 我听说使用dynamic分配很多可以增加内存碎片。 这是真的? 在C ++的上下文中,我理解所有的标准容器(std :: string,std :: vector等)都使用dynamic内存分配。 如果在整个程序中使用这些(特别是std :: string),内存碎片更可能是一个问题? 内存碎片怎么处理在一个STL沉重的应用程序?
有谁知道Android手机上的堆大小是否是根据操作系统版本设置的固定值,或者如果这是手机制造商可以决定的设置? 堆大小是否与电话上的RAM数量成比例? 我只find文章,人们说应用程序的堆大小是16M。 不过,这些文章有点老了。 从我看到的一个例子来看,在一个特定的模型上堆大小从20M到24M不等。 这款手机拥有768M的RAM。
列出你最喜欢的堆分析工具(例如jprofiler,jmap,…)。 让我们每个答案保持一个工具,每个工具的优点和缺点的简短列表。
编程语言的书籍解释了值的types是在堆栈上创build的,参考types是在堆上创build的,而不解释这两件事情是什么。 我没有读到这个清楚的解释。 我明白什么是堆栈 ,但是他们在什么地方(真实的计算机内存)? 它们在多大程度上由操作系统或语言运行时控制? 他们的范围是什么? 什么决定了他们每个的大小? 是什么让一个更快?