以下转载自: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语言 全局变量和局部变量的大小限制相关推荐

  1. C语言 全局变量和局部变量区别 - C语言零基础入门教程

    目录 一.全局变量和局部变量简介 1.全局变量简介 2.局部变量简介 二.全局变量和局部变量注意事项 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语 ...

  2. C语言-全局变量与局部变量

    C语言-全局变量与局部变量 ​ 某些问题要想彻底解决,只能仰仗技术革新和顶层设计的突破.就好比汽车出现前,你无论如何改进饲料配方和养殖技术,也无法培养出一匹时速100公里的马.正因为在认识问题这个阶段 ...

  3. c语言中全局变量内存,C语言——全局变量和局部变量在内存中的区别——及编译后的内存分区【栈-堆-全局存储区-文字常量区-程序代码区】...

    目录: 一:全局变量 二:局部变量 三:C语言经过编译之后将内存分为以下几个区域 (1)栈(stack) (2)堆(heap) (3)全局(静态)存储区 (4)文字常量区 (5)程序代码区 四:区别 ...

  4. c语言全局变量和局部变量问题汇总

    1.局部变量是否能和全局变量重名? 答:能,局部会屏蔽全局.要用全局变量,须要使用"::" 局部变量能够与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局 ...

  5. C语言全局变量和局部变量深入

    局部变量 定义在函数内部的变量称为局部变量(Local Variable),它的作用域仅限于函数内部, 离开该函数后就是无效的,再使用就会报错. 示例 int f1(int a){int b,c; / ...

  6. c语言建立全局变量,C语言全局变量和局部变量

    引子--- 变量可以在程序中三个地方说明: 函数内部.函数的参数定义中或所有的函数外部.根据所定义位置的不同, 变量可分为局部变量.形式参数和全程变量.从空间角度来看,变量可以分为全局变量和局部变量, ...

  7. C语言 全局变量和局部变量

    #全局变量和局部变量 ##1.变量作用域基本概念 - 变量作用域:变量的可用范围 - 按照作用域的不同,变量可以分为:局部变量和全局变量 ##2.局部变量 - 局部变量: +定义在函数内部的变量以及函 ...

  8. C语言 全局变量和局部变量的申请

    今天在学习排序算法比较性能的时候,针对数组的申请出现了问题. 然后就去寻找为什么? #include <stdio.h> int main(){int a[1000000];//局部变量r ...

  9. C语言 全局变量和局部变量的特点

    全局变量的特点 C语言做一个加法运算结果放到全局变量 #include <stdio.h>int g_n = 10;void Plus() {int i = 10;int k = 20;g ...

最新文章

  1. 今天写了个Win32服务设置软件,呵呵,纯绿色软件
  2. 软工作业2:硬币游戏——代码的分析与改进
  3. Python ML环境搭建与学习资料推荐
  4. QtObject QML类型
  5. Jmeter当获取正则表达式匹配数字为负数时获取所有匹配的值
  6. 【教训】rm -fr ./* 教训
  7. oracle 添加服务命名空间,c# – 找不到类型或命名空间名称“OracleConnection”
  8. 9-13 ruby环境准备
  9. 百度的“知心搜索”揭秘
  10. 超强OCR文字识别软件首选ABBYY FineReader
  11. android 5.1 httpclient,【Android进阶学习】Http编程之HttpClient
  12. 决策树模型实现冬小麦提取
  13. 今天吃什么随机网页_灵魂拷问:今天在西昌你想吃什么?
  14. 产品读书《科技想要什么》KK
  15. 友盟统计 H5 vue 隐藏友盟图标
  16. SOFA BOLT源码解析之设计要点-网络IO
  17. 小学计算机设备报表,小学信息技术教育及电教设备自查报告
  18. Idea中发布JAR包到中央仓库报错问题处理 unable to find valid certification path to requested target
  19. 手工皮具的大坑之路-封边感悟与工具
  20. tf.extract_image_patches

热门文章

  1. 荐书 | 睡不着?你需要这本神经漫游指南
  2. oracle日期查询
  3. python计算ema_python – 添加一个列(EMA),它是pandas中先前新列值的结果
  4. wps公式编辑器下载 WPS2016如何插入书签,很好玩哦!
  5. 转载:传说中的T检验
  6. JFlow手机端开发说明与案例
  7. Spring注解详解:@ComponentScan自动扫描组件使用
  8. CentOS7部署Apache服务器
  9. asp前端日历_asp日历代码
  10. Live800:全渠道智能客服系统,助力企业打造全渠道客户中心