Questions tagged «memory-allocation»

8
变量如何存储在程序堆栈中以及如何从程序堆栈中检索?
提前为这个问题的幼稚表示歉意。我是位50岁的艺术家,这是我第一次真正地正确理解计算机。所以去了。 我一直在尝试了解编译器如何处理数据类型和变量(从非常普遍的意义上讲,我知道有很多事情要做)。我对“堆栈”中的存储与值类型之间的关系以及“堆”中的存储与引用类型之间的关系的理解中缺少一些东西(引号旨在表示我理解这些术语是抽象的,而不是抽象的在像我构想此问题的方式这样的简化上下文中太夸张了。无论如何,我的简单想法是布尔值和整数之类的类型都放在“堆栈”上,因为它们可以存储,因为它们在存储空间方面是已知的实体,并且可以轻松地控制它们的范围。 但是我没有得到的是应用程序随后如何读取堆栈上的变量-如果我声明并分配x为整数,例如x = 3,并且存储在堆栈上保留,然后将其值3存储在堆栈中,然后在我声明和分配的功能与相同y,例如4,然后x在另一个表达式中使用(例如z = 5 + x),该程序如何读取x以便评估z何时在下面y在堆栈上?我显然缺少了一些东西。是不是堆栈上的位置仅与变量的生存期/范围有关,并且整个堆栈实际上始终可以被程序访问?如果是这样,是否意味着还有其他索引仅保留堆栈上变量的地址以允许检索值?但是后来我认为堆栈的全部目的是将值与变量地址存储在同一位置?在我微弱的头脑中,似乎还有其他索引,那么我们在谈论的更像是堆吗?我显然很困惑,我只是希望对我的简单问题有一个简单的答案。 感谢您阅读本文。

3
具有恒定时间操作的智能内存管理?
让我们考虑一个内存段(可以在需要时增大或缩小文件的大小,就像文件一样),您可以在该内存段上执行两个涉及固定大小块的基本内存分配操作: 分配一个块 释放先前已分配的不再使用的块。 同样,作为一项要求,不允许内存管理系统在当前分配的块之间移动:它们的索引/地址必须保持不变。 最幼稚的内存管理算法将增加一个全局计数器(初始值为0),并将其新值用作下一个分配的地址。但是,当只剩下几个分配的块时,这绝不允许缩短段。 更好的方法:保留计数器,但维护一个释放块列表(可以在固定时间内完成),并在不为空的情况下将其用作新分配的源。 接下来是什么?在保持恒定的时间分配和解除分配约束的情况下,有什么办法可以使内存段尽可能地短而可以完成? (目标可能是使用最小的地址跟踪当前未分配的块,但是在恒定时间内似乎不可行……)

1
在纯需求分页期间交换空间管理
以下是我在进行OS家庭作业时遇到的一个疑问-但是,它似乎比基于概念的问题要多于简单的编码问题,因此恕我直言,我认为作业标签不适合这样做。 在给定固定数量的RAM和交换内存的情况下,针对同时运行的多个进程的纯需求分页方案中,在以下两种情况下,交换空间会发生什么情况: 进程遇到页面错误,RAM中没有可用的空闲帧,因此需要将进程的内核帧块中的一个页面写出以进行交换(为简单起见,我不考虑复制-on-write case)。明确地说,将在交换空间中的哪个位置写入此帧,并且为此需要更新哪些数据结构? 当某个进程需要进入特定页面时,它在交换内存中的位置如何?如何知道该特定页面是否全部存在于交换中? 如您所料,我很难理解在纯需求管理方案中以何种方式管理交换空间,以及什么数据结构必不可少。如果您可以在答案中引用任何链接,那就太好了(我在“操作系统概念-Silberschatz的第8版,我找不到我的问题的明确答案”中进行了搜索)。

2
有人可以解释这张关于平板分配的图吗?
我试图了解Slab分配的工作原理,以及为什么它与普通分页不同或更好。 我发现了该图,如果有更多说明,我认为将对您有所帮助。 一些问题: 3KB和7KB项代表什么?他们必须以某种方式联系起来吗?为什么用这种方式包装? 在缓存列中,缓存是灰色框还是灰色框内的白色/蓝色框?灰色盒子是一堆缓存吗? 这些平板仅仅是蓝框,还是整个“物理连续页面”都是平板? 我真的很感谢您的帮助。谢谢!
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.