Questions tagged «memory-management»

动态分配和释放部分物理内存的过程,以响应程序请求(如果可能),请求者之间保持公平且无饥饿。


5
具有“实际用法”的memory_get_peak_usage()
如果将real_usage参数设置为truePHP DOCS,则将获得从系统分配的实际内存大小。如果是的false话,它将获得报告的内存emalloc() 这2个选项中的哪个返回最大值。相对于php.ini中的内存限制值分配的内存? 我想知道脚本达到该极限有多接近。


6
C ++中向量的初始容量
什么是capacity()的std::vector这是使用默认constuctor产生的?我知道那size()是零。我们可以声明默认构造的向量不调用堆内存分配吗? 这样,就有可能使用单个分配来创建具有任意保留的数组std::vector<int> iv; iv.reserve(2345);。假设由于某种原因,我不想size()在2345上启动。 例如,在Linux(g ++ 4.4.5,内核2.6.32 amd64)上 #include <iostream> #include <vector> int main() { using namespace std; cout << vector<int>().capacity() << "," << vector<int>(10).capacity() << endl; return 0; } 印刷0,10。这是规则,还是STL供应商相关?


3
iPhone OS内存警告。不同级别是什么意思?
关于在iPhone OS设备上管理内存的妖术:不同级别的内存警告是什么意思。1级?2级?拨盘转到11吗? 上下文:经过长时间的内存压力测试-包括在播放iPod音乐播放器应用程序的同时运行我的iPad应用程序,我倾向于忽略收到的随机但很少出现的内存警告。我的应用程序永不崩溃。曾经 我的应用程序无泄漏。而且,内存警告似乎并不重要。 谢谢, 道格

6
为什么需要std :: get_temporary_buffer?
我应该出于什么目的使用std::get_temporary_buffer?标准说: 获取一个足以存储最多n个相邻T对象的存储指针。 我以为缓冲区将在堆栈上分配,但这不是事实。根据C ++标准,此缓冲区实际上不是临时的。与全局函数相比,此函数有什么优势,全局函数::operator new也不构造对象。我对以下陈述是否等效? int* x; x = std::get_temporary_buffer<int>( 10 ).first; x = static_cast<int*>( ::operator new( 10*sizeof(int) ) ); 该功能仅存在于语法糖吗?为什么有temporary它的名字? 1996年7月1日在Dobb博士的日记中提出了一个用例来实现算法: 如果没有缓冲区可以分配,或者小于请求的缓冲区,则该算法仍然可以正常工作,只会减慢速度。

12
为什么C中的`free`不占用要释放的字节数?
明确一点:我确实知道malloc并free在C库中实现,该库通常从OS分配内存块,并进行自己的管理以将较小的内存分配给应用程序,并跟踪分配的字节数。这个问题不是免费如何知道多少免费。 相反,我想知道为什么free首先要采用这种方式。作为一种低级语言,我认为要求C程序员不仅跟踪分配了什么内存而且跟踪多少内存是完全合理的(实际上,我通常发现我最终跟踪了字节数)仍然分配)。在我看来,明确给出字节数free可能会允许某些性能优化,例如,具有针对不同分配大小的单独池的分配器将能够通过查看输入参数来确定要释放哪个池,并且总体而言,空间开销会更少。 因此,简而言之,为什么要创建malloc和free创建它们以使它们在内部跟踪分配的字节数?这只是历史性的意外吗? 一个小的修改:一些人提供了一些要点,例如“如果您释放的金额与分配的金额不同,将会怎样?” 我想象中的API可能只需要一个就可以准确释放分配的字节数。释放或多或少可以简单地由UB或实现定义。不过,我不想阻止关于其他可能性的讨论。

11
在分配的内存上不使用free()是否可以吗?
我正在学习计算机工程,并且有一些电子课程。我听到了,从我的两个教授(这些课程),有可能避免使用的free()功能(后malloc(),calloc()等),因为分配可能不会被再次使用的存储空间分配等内存。也就是说,例如,如果您分配4个字节然后释放它们,则将有4个字节的空间,可能不会再分配:您将有一个Hole。 我认为这很疯狂:您不能拥有一个非玩具程序,在其中不释放内存就在堆上分配内存。但是我没有知识来确切解释为什么它如此重要以至于每个人都malloc()必须有一个free()。 因此:在任何情况下都可以malloc()不使用而使用afree()吗?如果没有,我该如何向教授解释?


5
斯坦福大学教程与GCC之间的冲突
根据这部电影(大约38分钟),如果我有两个具有相同局部变量的函数,则它们将使用相同的空间。因此,以下程序应打印5。编译gcc结果-1218960859。为什么? 该程序: #include <stdio.h> void A() { int a; printf("%i",a); } void B() { int a; a = 5; } int main() { B(); A(); return 0; } 根据要求,这是反汇编程序的输出: 0804840c <A>: 804840c: 55 push ebp 804840d: 89 e5 mov ebp,esp 804840f: 83 ec 28 sub esp,0x28 8048412: 8b 45 f4 …

7
为什么堆栈内存大小如此有限?
在堆上分配内存时,唯一的限制是可用RAM(或虚拟内存)。它使Gb的内存。 那么,为什么堆栈大小如此有限(大约1 Mb)呢?什么技术原因阻止您在堆栈上创建非常大的对象? 更新:我的意图可能不清楚,我不想在堆栈上分配大对象,也不需要更大的堆栈。这个问题仅仅是出于好奇。

13
如何找到导致malloc“双重释放”错误的原因?
我正在使用Objective-C编写应用程序,但出现此错误: MyApp(2121,0xb0185000)malloc:***对象0x1068310的错误:double free ***在malloc_error_break中设置一个断点以进行调试 当我释放NSAutoreleasePool时,就发生了这种情况,但是我无法弄清楚我要两次释放哪个对象。 我如何设置他的断点? 有没有办法知道什么是“对象0x1068310”?

4
__weak和__block引用之间有什么区别?
我正在阅读Xcode的文档,这使我感到困惑: __block typeof(self) tmpSelf = self; [self methodThatTakesABlock:^ { [tmpSelf doSomething]; }]; 以下是从文档中复制的: 块是对其捕获的变量的有力参考。如果 self在块内使用,则该块形成对的强引用self,因此,如果 self对块也有强引用(通常这样做),则会产生强引用循环。为了避免循环,您需要__block在块外创建一个对自身的弱引用(或引用),如上例所示。 我不明白“弱(或__block)”是什么意思? 是 __block typeof(self) tmpSelf = self; 和 __weak typeof(self) tmpSelf = self; 这里完全一样吗? 我在文档中发现了另外一块: 注意:在垃圾回收的环境中,如果将__weak和 __block修饰符都应用于变量,则该块将无法确保其保持活动状态。 所以,我完全不解。

7
malloc用于C中的结构和指针
假设我想定义一个表示向量长度及其值的结构,如下所示: struct Vector{ double* x; int n; }; 现在,假设我要定义向量y并为其分配内存。 struct Vector *y = (struct Vector*)malloc(sizeof(struct Vector)); 我在互联网上的搜索显示我应该分别为x分配内存。 y->x = (double*)malloc(10*sizeof(double)); 但是,似乎我为y-> x分配了两次内存,一次是为y分配内存,另一次是为y-> x分配内存,这似乎浪费了内存。如果让我知道编译器的实际功能以及初始化y和y-> x的正确方法,将不胜感激。 提前致谢。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.