一种语言中不同种类的变量往往采用不同的存储分配策略,C语言中的全局变量和静态变量采用静态分配,而自动(Auto)类变量采用(30)。A.最佳分配B.首先分配C.堆式分配D.栈式分配

题目

一种语言中不同种类的变量往往采用不同的存储分配策略,C语言中的全局变量和静态变量采用静态分配,而自动(Auto)类变量采用(30)。

A.最佳分配

B.首先分配

C.堆式分配

D.栈式分配


相似考题
参考答案和解析
正确答案:D
解析:在目标程序运行时,目标代码所引用的数据对象在内存空间中。因此,在编译阶段产生目标时,要把目标代码所引用的数据对象映射到内存空间上,在运行时,再分配给需要的内存单元,这个过程称为存储分配。分配的对象有简单数据类型(如整、实和布尔型等)、结构数据类型(如数组和记录等)和连接数据(如返回地址、参数等)。由于各种语言的语义不同,主要是名字的作用域和生存期不同,因而对存储空间的组织和采用的存储分配策略也不同,可分为静态和动态两大类。把过程或函数的一次执行叫一个活动,把一个活动所需要的存储空间组织在一起构成一个活动记录(有的书上称数据区),不同语言的活动记录结构是不同的。如果在编译时能确定目标程序运行中所需的全部数据空间的大小及相互位置,那么,能在编译时安排好目标程序运行时全部数据对象在存储空间中的位置,且不随目标程序的运行而改变,则称这种分配为静态存储分配,如先于FORTRAN77版本的FORTRAN语言采用这种分配策略。如果一个程序语言允许递归过程、可变数组或动态数据结构,那么,就需采用动态存储分配策略,它有两种方式:栈式和堆式。栈式动态存储分配策略适用于组织PASCAL、C、ALGOL之类的语言的活动记录。每当调用一个过程产生一个活动时,它所需的活动记录就分配在栈顶。每当过程的一个活动结束时,就释放栈顶的活动记录。如果一个程序语言提供用户构造动态数据结构的设施,有自由地申请数据空间和退还数据空间的机制(如C++中的newdelete,PASCAL的new),或者不仅有过程而且有进程的程序结构,即空间的使用未必服从“先申请后释放,后申请先释放”的原则,那么栈式的动态存储分配方案就不适用了,这种情况下通常使用一种称为堆式的动态存储分配方案。下图所示为C语言运行时的内存空间安排,编译程序通常把全局量和每个函数中的静态量分在静态数据区,把一个函数中的自动变量和必需的数据组织成活动记录,随着调用函数的展开,分配在栈中。对于程序员构造动态数据结构,调用malloc动态申请的单元,则分配在堆中。
更多“一种语言中不同种类的变量往往采用不同的存储分配策略,C语言中的全局变量和静态变量采用静态分配 ”相关问题
  • 第1题:

    4、以下是有关C语言程序的变量的作用域和生存期的叙述,错误的是()。

    A.静态(static型)变量和非静态局部(auto型)变量都分配在对应栈帧中

    B.因为非静态局部变量被分配在栈中,所以其作用域仅在过程体内

    C.非静态局部变量可以和全局变量同名,是因为它们被分配在不同存储区

    D.不同过程中的非静态局部变量可以同名,是因为它们被分配在不同栈帧中


    B 变最是指在程序运行过程中其值可以改变的值,一个变量实质上是代表了内存中的某个存储单元。在程序中对某个变量的操作实际上就是对这个存储单元的操作,程序运行期间,这个分配的存储单元不会改变,但是其值可以变化。变量命名要符合标识符的规定,其中下划线是标识符的组成字符。程序中所有变量都必须先定义后使用。

  • 第2题:

    C语言中如果在函数中定义的变量未声明其存储类别,则默认是静态变量。


    C

  • 第3题:

    2、C语言中extern关键字表示

    A.全局变量

    B.静态变量

    C.外部变量

    D.变量或函数被定义在别的文件中


    全局变量

  • 第4题:

    1、下列说法错误的是()。

    A.变量的作用域决定了变量可以被访问的范围,而变量的存储类型决定了变量的生存期。

    B.静态变量和全局变量都是在静态存储区中分配内存的,而自动变量是在动态存储区中分配内存的。

    C.用extern声明变量为外部变量的时候,编译器是对其分配内存的。

    D.静态局部变量和静态全局变量的生存期是相同的,但二者的作用域是不同的,而静态局部变量和自动变量的作用域都是局部的,但二者的生存期是不同的。


    B

  • 第5题:

    以下是有关C语言程序的变量的作用域和生存期的叙述,错误的是()。

    A.静态(static型)变量和非静态局部(auto型)变量都分配在对应栈帧中

    B.因为非静态局部变量被分配在栈中,所以其作用域仅在过程体内

    C.非静态局部变量可以和全局变量同名,是因为它们被分配在不同存储区

    D.不同过程中的非静态局部变量可以同名,是因为它们被分配在不同栈帧中


    静态( static 型)变量和非静态局部( auto 型)变量都分配在对应栈帧中