什么是内存块?

时间:2014-03-29 13:45:54

标签: c

C书继续谈论内存块,但我从来不知道它们到底是什么。内存块是一个数组吗?一个大的存储单元?例如:

malloc(2*sizeof(int));  /*This allocates a block*/

2 个答案:

答案 0 :(得分:5)

A"内存块"是一块连续的记忆。

C中的数组也是一块连续的内存。但是,使用不太通用的术语" array"具有通用术语"内存块"没有(毕竟,你可以在一个区块内有多种类型的数据,而术语"数组"意味着使用的一致性。)

使用malloc动态地为您提供内存 - 另一种方法是从堆栈中分配内存,就像使用int my_ints[2]一样,但这并不能让您控制块的大小。您的函数已在运行,或者在函数启动后分配更多块。

此外,堆栈大小相对有限。

答案 1 :(得分:3)

内存块是(真实或虚拟)内存中的一个或多个连续字符("字节" - 请参阅注释)的组。

malloc(size_t size)函数分配一个内存块。 size是块的大小(以字符为单位)。请注意,sizeof(int)int消耗的字符数,因此malloc(2*sizeof(int));会分配一个足以存储2个整数的内存块。

因为C是针对许多不同的架构而设计的;不能保证不同内存块中的事物之间存在任何关系。例如,您不能分配2个内存块,然后计算它们之间的差异(至少,不依赖于实现定义的行为)。

对于数组,数组中的元素之间必须存在关系;对于结构,结构的成员之间必须存在关系。因此,每个数组和每个结构必须包含在内存块中。

注意:从历史上看,char是C处理的最小单位," byte"被定义为1个字符(例如sizeof(char) == 1),即使CHAR_BIT恰好是奇怪的东西,如9或16或32.在C之外,"字节"已成为8位数量的同义词,并在国际标准(IEC 80000-13,IEEE 1541)中定义为8位单位。结果是C用于" byte"的定义。不是一个实际的(国际标准)字节,说malloc()分配(国际标准)字节是错误的,但是说malloc()分配字符或非标准是正确的。不幸的是,C标准曾经被称为字节的东西"。