C语言 全局变量和局部变量的大小限制
以下转载自:http://blog.sina.com.cn/s/blog_4a033b090100zdsd.html
下午做最长公共子序列的时候遇到的问题,问了felix后恍然大悟...看代码
#include <stdio.h>
int main()
{
int a[1000000];//局部变量
return 0;
}
编译运行后发现溢出错误。
#include <stdio.h>
int a[1000000];//全局变量
int main()
{
return 0;
}
编译运行后正常。
在解释原因前我们先看一下一个由C/C++编译的程序占用的内存分为几个部分:
1、栈区(stack segment) :由编译器自动分配释放,存放函数的参数的值,局部变量的值等。在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。
2、堆区(heap segment) :一般由程序员分配释放,若程序员不释放,程序结束时可能由系统回收。它与数据结构中的堆是两回事。堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。
3、全局区(静态区)(data segment):全局变量和静态变量的存储区域是在一起的,程序结束后由系统释放。数据区的大小由系统限定,一般很大。
4、文字常量区:常量字符串就是放在这里的, 程序结束后由系统释放。
5、程序代码区:存放函数体的二进制代码。
综上所述,局部变量空间是很小的,我们开一个a[1000000]就会导致栈溢出;而全局变量空间在Win 32bit 下可以达到4GB,因此不会溢出。
C语言 全局变量和局部变量的大小限制相关推荐
- C语言 全局变量和局部变量区别 - C语言零基础入门教程
目录 一.全局变量和局部变量简介 1.全局变量简介 2.局部变量简介 二.全局变量和局部变量注意事项 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语 ...
- C语言-全局变量与局部变量
C语言-全局变量与局部变量 某些问题要想彻底解决,只能仰仗技术革新和顶层设计的突破.就好比汽车出现前,你无论如何改进饲料配方和养殖技术,也无法培养出一匹时速100公里的马.正因为在认识问题这个阶段 ...
- c语言中全局变量内存,C语言——全局变量和局部变量在内存中的区别——及编译后的内存分区【栈-堆-全局存储区-文字常量区-程序代码区】...
目录: 一:全局变量 二:局部变量 三:C语言经过编译之后将内存分为以下几个区域 (1)栈(stack) (2)堆(heap) (3)全局(静态)存储区 (4)文字常量区 (5)程序代码区 四:区别 ...
- c语言全局变量和局部变量问题汇总
1.局部变量是否能和全局变量重名? 答:能,局部会屏蔽全局.要用全局变量,须要使用"::" 局部变量能够与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局 ...
- C语言全局变量和局部变量深入
局部变量 定义在函数内部的变量称为局部变量(Local Variable),它的作用域仅限于函数内部, 离开该函数后就是无效的,再使用就会报错. 示例 int f1(int a){int b,c; / ...
- c语言建立全局变量,C语言全局变量和局部变量
引子--- 变量可以在程序中三个地方说明: 函数内部.函数的参数定义中或所有的函数外部.根据所定义位置的不同, 变量可分为局部变量.形式参数和全程变量.从空间角度来看,变量可以分为全局变量和局部变量, ...
- C语言 全局变量和局部变量
#全局变量和局部变量 ##1.变量作用域基本概念 - 变量作用域:变量的可用范围 - 按照作用域的不同,变量可以分为:局部变量和全局变量 ##2.局部变量 - 局部变量: +定义在函数内部的变量以及函 ...
- C语言 全局变量和局部变量的申请
今天在学习排序算法比较性能的时候,针对数组的申请出现了问题. 然后就去寻找为什么? #include <stdio.h> int main(){int a[1000000];//局部变量r ...
- C语言 全局变量和局部变量的特点
全局变量的特点 C语言做一个加法运算结果放到全局变量 #include <stdio.h>int g_n = 10;void Plus() {int i = 10;int k = 20;g ...
最新文章
- 今天写了个Win32服务设置软件,呵呵,纯绿色软件
- 软工作业2:硬币游戏——代码的分析与改进
- Python ML环境搭建与学习资料推荐
- QtObject QML类型
- Jmeter当获取正则表达式匹配数字为负数时获取所有匹配的值
- 【教训】rm -fr ./* 教训
- oracle 添加服务命名空间,c# – 找不到类型或命名空间名称“OracleConnection”
- 9-13 ruby环境准备
- 百度的“知心搜索”揭秘
- 超强OCR文字识别软件首选ABBYY FineReader
- android 5.1 httpclient,【Android进阶学习】Http编程之HttpClient
- 决策树模型实现冬小麦提取
- 今天吃什么随机网页_灵魂拷问:今天在西昌你想吃什么?
- 产品读书《科技想要什么》KK
- 友盟统计 H5 vue 隐藏友盟图标
- SOFA BOLT源码解析之设计要点-网络IO
- 小学计算机设备报表,小学信息技术教育及电教设备自查报告
- Idea中发布JAR包到中央仓库报错问题处理 unable to find valid certification path to requested target
- 手工皮具的大坑之路-封边感悟与工具
- tf.extract_image_patches