计算机理论大神求解答

如果C语言我输入

main()

{int a=-1;

}

请问常量-1占内存吗?我认为它应该占计算机内存,不是变量a的那种内存,求解答

int a = -1,a是变量,不是常量。

程序占用的内存被分了以下几部分.

1、栈区(stack)
由编译器自动分配释放 ,存放函数的参数值,局部变量的值等,内存的分配是连续的,类似于平时我们所说的栈,如果还不清楚,那么就把它想成数组,它的内存分配是连续分配的,即,所分配的内存是在一块连续的内存区域内.当我们声明变量时,那么编译器会自动接着当前栈区的结尾来分配内存.本例中 a分配的内存在栈上。

2、堆区(heap)
一般由程序员分配释放, 若程序员不释放,程序结束时可能由操作系统回收.类似于链表,在内存中的分布不是连续的,它们是不同区域的内存块通过指针链接起来的.一旦某一节点从链中断开,我们要人为的把所断开的节点从内存中释放.

3、全局区(静态区)(static)
全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束后由系统释放

4、文字常量区
常量字符串就是放在这里的。 程序结束后由系统释放

5、程序代码区
存放函数体的二进制代码。

任何变量都是要占内存的,不然存储到哪里呢。int a就会占内存,无论等于几

-1不占计算机内存,顶多是使当前文件多了几个字符

变量a占内存,而-1本身不占内存,它是操作系统生成出来的,用来给a赋值的。逆向思维一下就明白了,如果-1占内存,那我要是循环给一个数,赋值1~1G,那岂不是运行起来要占1个G?

 

变量a占内存,而-1本身不占内存,它是操作系统生成出来的,用来给a赋值的。逆向思维一下就明白了,如果-1占内存,那我要是循环给一个数,赋值1~1G,那岂不是运行起来要占1个G?