Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 什么是内存块?_C - Fatal编程技术网

C 什么是内存块?

C 什么是内存块?,c,C,C语言的书一直在谈论内存块,但我一直不明白它们到底是什么。内存块是数组吗?一个大的存储单元?例如: malloc(2*sizeof(int)); /*This allocates a block*/ “内存块”是一个连续的内存块 C中的数组也是一个连续的内存块。但是,使用不太通用的术语“数组”意味着通用术语“内存块”没有(毕竟,一个块中可以有多种类型的数据,而术语“数组”意味着使用的一致性) 使用malloc可以动态地为您提供内存——另一种方法是从堆栈中分配内存,就像int my_ints[

C语言的书一直在谈论内存块,但我一直不明白它们到底是什么。内存块是数组吗?一个大的存储单元?例如:

malloc(2*sizeof(int));  /*This allocates a block*/
“内存块”是一个连续的内存块

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

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


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

内存块是一组(实内存或虚拟内存)的一个或多个连续字符(“字节”-请参见注释)

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

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

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

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