就像在标题,什么是连续的存储块?

有帮助吗?

解决方案

一个没有在其占据的地址的任何间隙。你可能只认为这是一个“块”,而想的东西在中间的“两大块”的空白。

术语在阵列中的定义出现为“连续的”。这意味着元件被布局的端至端的,没有不连续性和它们之间没有填充(有可能是各元件的内部填充,但不是元件之间)。这样的5 4字节元素看起来像这样的阵列(每字节1个下划线字符,则|符号不表示存储器):

 ____ ____ ____ ____ ____
|____|____|____|____|____|

它不是这样的:

 ____ _ ____ _ ____ _ ____ _ ____
|____|_|____|_|____|_|____|_|____|

和它也不是这样的:

 ____ ____ ____                                           ____ ____
|____|____|____| ... somewhere completely different ...  |____|____|

在所有情况下,“看起来像”装置“只要用C可见地址被关注”。东西可以在虚拟地址空间连续的,但在物理RAM不是连续的。对于这个问题,事情可能是在物理内存地址空间的连续性,但在物理内存不实际相邻。其中有一半可能是在一个片内RAM在这里,并在那里的另一半在另一个的RAM芯片。但C存储器模型不能“看到”的任何其

其他提示

这是5个字节的连续存储器块,从位置1跨越到位置5:

“替代文字”

它代表字节(色光蓝色)一起在存储器在它们之间没有间隙字节(白色)。

这是一个不连续的组的五个字节的兴趣:

“替代文字”

有被分段成三个组,间隙字节(着色为黄色)的字节位置处4和6在位置1开始有三个字节的连续块,从位置1到3还有两个块跨越一个字节分别各在位置5和7。

由于它们的从位置1跨越感兴趣的字节之间做介至7

在位置0中未使用的块,以及超出位置7任何后续块通常可忽略。

其不受其它存储器中断的内存块。或者更准确地说它需要的虚拟地址空间不间断块。真正的RAM背衬该地址空间不需要是连续的。

此如果分配一个大的存储器块是重要的。该OS具有把它给你作为一个连续的块,但是,如果存储器被这样分段,只有较小的碎片可以自由然后此存储器分配不能被满足,即使总游离存储器比所请求的空间大。

这是不能在64位应用程序这样的大问题,因为地址空间大那里。但在32个的进程可能发生的是堆被这样分段(释放的块之间仍有unfreed块),较大的分配失败。

在当调用存储器分配和请求的存储器24个字节分配存储器的上下文应答,它必须能够找到未分配存储器的至少24个字节的单个块。

如果它有16个字节的存储器中,起始地址x另有8个字节处开始的地址y使得y > x + 16y < x - 8(这将产生间隙),则分配器不能满足您的24个字节,即使请求有一共有24个字节的分类。

请参阅也碎片

一个存储器块是连续的完全相同时,它是由从一个单一的线性地址空间中的开始和结束地址定义的,并且没有孔。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top