C书继续谈论内存块,但我从来不知道它们到底是什么。内存块是一个数组吗?一个大的存储单元?例如:
malloc(2*sizeof(int)); /*This allocates a block*/
答案 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标准曾经被称为字节的东西"。