。关于内存(程序的执行需要内存的支持)
()内存本身在物理上是硬件器件,由操作系统提供
()内存的管理最终由操作系统统一管理。为了能过便捷的管理内存(酒店管理房间 是不是分很多不同的类型和待遇呢),同样操作系统提供了多种的机制来让了多种机制来让我们应用程序使用内存。这些机制彼此不同,各自有各自的特点,我们程序根据自己的实际情况来选择某种方式获取内存(在操作系统处登记这块内存的临时使用权限)、使用内存、释放内存(向操作系统归还这块内存的使用权限)。也就是在进入酒店拿到钥匙或者卡,然后就可以进入一个编号为XX的房间,也就是你此时有临时的使用权限比如为一晚,第二天时间一到你就的归还钥匙或者卡,也就是释放内存。
。C语言能够获取内存的三种方式:
栈 堆 数据区
。关于栈
spec1:
运行的时候自动分配而且自动回收,程序员不用人工的去干预
spec2:反复使用
栈内存在程序中就是一块空间 程序反复使用这块空间
spec3:脏内存
为啥是脏的呢,反复使用,使用了就算了还不去清理,操作系统也不会帮你打理,哪有大哥给你做饭还洗碗的。因此分配到的时候保留的是原来的值,所以啊,变量定义最好初始化,不然出事儿都不知道啥情况
spec4:临时的(函数不能返回栈变量的指针,因为这个空间是临时的,注意了,很多时候我们想得到变量的地址,取出来用指针指向它,然后操纵它,但是这个之后,一旦其他的函数因为也是在栈中,很有可能就会取代刚才那块空间,这样就得不到理想的结果)
程序一执行完,你达到了目的,你就可以走了,让给其他的人也可以用这块空间。看看,多么人性化 #include <stdio.h> // 函数不能返回函数内部局部变量的地址,因为这个函数执行完返回后这个局部变量已经不在了
// 这个局部变量是分配在栈上的,虽然不在了但是栈内存还在还可以访问,但是访问时实际上这个
// 内存地址已经和当时那个变量无关了。
int *func(void)
{
int a = ; // a是局部变量,分配在栈上又叫栈变量,又叫临时变量
printf("&a = %p\n", &a);
return &a;
} void func2(void)
{
int a = ;
int b = ;
int c = ;
printf("in func2, &a = %p\n", &a);
} void stack_overflow(void)
{
int a[] = {};
a[-] = ;
} void stack_overflow2(void)
{
int a = ;
stack_overflow2();
} int main(void)
{
//stack_overflow();
stack_overflow2();
/*
int *p = NULL;
p = func();
func2();
func2();
printf("p = %p\n", p); printf("*p = %d.\n", *p); // 证明栈内存完了后是脏的
*/
return ;
}

学习笔记,嘻嘻,感觉不错。勿喷~~

浅谈c语言程序为什么需要内存 栈又是什么?的更多相关文章

  1. 浅谈C语言内存管理、内存泄露、堆栈

    1.内存分配区间:         对于一个C语言程序而言,内存空间主要由五个部分组成:代码段(.text).数据段(.data).静态区(.BSS).堆和栈组成.         BSS段:BSS段 ...

  2. 浅谈C语言中的强符号、弱符号、强引用和弱引用

    摘自http://www.jb51.net/article/56924.htm 浅谈C语言中的强符号.弱符号.强引用和弱引用 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2014- ...

  3. 浅谈Java语言环境搭建-JDK8

    title: 浅谈Java语言环境搭建-JDK8 blog: CSDN data: Java学习路线及视频 1.What's the JDK,JRE JDK(Java Development Kit ...

  4. 【ASP.NET MVC系列】浅谈ASP.NET 程序发布过程

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  5. 浅谈Spark应用程序的性能调优

    浅谈Spark应用程序的性能调优 :http://geek.csdn.net/news/detail/51819 下面列出的这些API会导致Shuffle操作,是数据倾斜可能发生的关键点所在 1. g ...

  6. 浅谈C语言中断处理机制

    一.中断机制 1.实现中断响应和中断返回 当CPU收到中断请求后,能根据具体情况决定是否响应中断,如果CPU没有更急.更重要的工作,则在执行完当前指令后响应这一中断请求.CPU中断响应过程如下:首先, ...

  7. 浅谈c语言结构体

    对于很多非计算机专业来说,c语言课程基本上指针都不怎么讲,更别说后面的结构体了.这造成很多学生对结构体的不熟悉.这里我就浅谈一下我对结构体的认识. 结构体,就是我们自己定义出一种新的类型,定义好之后, ...

  8. 浅谈微信小程序对于房地产行业的影响

    前几日,我们曾经整理过一篇文章是关于微信小程序对于在线旅游业的影响的一些反思(浅谈微信小程序对OTA在线旅游市场的影响),近日由于生活工作的需要走访了一些房地产的住宅商品房,突然想到微信小程序对于房地 ...

  9. 浅谈C语言的数据存储(一)

    作者:冯老师,华清远见嵌入式学院讲师. 程序由指令和数据组成,C语言程序亦是如此.开发者在编写程序的时候往往需要根据不同数据的特点以及程序需求来选择不同的数据存储方式,那么在C语言中数据的存储分为哪些 ...

随机推荐

  1. 最最常用的 100 个 Java 类(转)

    大部分的 Java 软件开发都会使用到各种不同的库.近日我们从一万个开源的 Java 项目中进行分析,从中提取出最常用的 Java 类,这些类有来自于 Java 的标准库,也有第三方库.每个类在同一个 ...

  2. iTunes备份文件路径

    Windows 7 电脑:C:\Users\使用者名称\AppData\Roaming\Apple Computer\MobileSync\Backup XP 电脑:C:\Documents and ...

  3. acid数据库事务正确执行的四个基本要素的缩写编辑本义项

    ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability).一个支持事务(T ...

  4. 经常使用ASCII码表(方便查找)

    经常使用ASCII码表(方便查找) 键盘 ASCII码 键盘 ASCII码 键盘 ASCII码 键盘 ASCII码 ESC 27 7 55 O 79 g 103 SPACE 32 8 56 P 80 ...

  5. igmpproxy源码学习——igmpProxyInit()

    igmpproxy源码学习--igmpProxyInit()函数具体解释.igmpproxy初始化 在执行igmpproxy的主程序igmpproxyRun()之前须要对igmpproxy进行一些配置 ...

  6. C++类的const成员函数、默认的构造函数、复制形参调用函数(转)

    C++类的const成员函数 double Sales_item::avg_price() const { } const关键字表明这是一个const成员函数,它不可以修改Sales_item类的成员 ...

  7. FoxOne---一个快速高效的BS框架--(4)

    FoxOne---一个快速高效的BS框架--(1) FoxOne---一个快速高效的BS框架--(2) FoxOne---一个快速高效的BS框架--(3) FoxOne---一个快速高效的BS框架-- ...

  8. Android--Service之绑定服务交互

    前言 开篇名义,这篇博客介绍一下Android下使用绑定服务进行时数据交互的几种方法.关于Android下Service的内容,前面两篇博客已经介绍了,不清楚的可以移步过去先看看:Android--S ...

  9. Mysql相关操作

    1. 如何更改系统环境变量PATH?vim /etc/profile  加入 PATH=$PATH:/usr/local/mysql/bin2. 默认mysql安装好后,并没有root密码,如何给ro ...

  10. FeatureClass对象

    概述: 在讲述FeatureClass对象之前,首先说明与FeatureClass对象相关的对象: Table对象,是不具有空间信息的二维表,是一张仅能在ArcMap的Table Of Content ...