。关于内存(程序的执行需要内存的支持)
()内存本身在物理上是硬件器件,由操作系统提供
()内存的管理最终由操作系统统一管理。为了能过便捷的管理内存(酒店管理房间 是不是分很多不同的类型和待遇呢),同样操作系统提供了多种的机制来让了多种机制来让我们应用程序使用内存。这些机制彼此不同,各自有各自的特点,我们程序根据自己的实际情况来选择某种方式获取内存(在操作系统处登记这块内存的临时使用权限)、使用内存、释放内存(向操作系统归还这块内存的使用权限)。也就是在进入酒店拿到钥匙或者卡,然后就可以进入一个编号为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. (转)iOS 证书、密钥及信任服务

    iOS 证书.密钥及信任服务 ——翻译自Apple Reference<Certificate,Key,and Trust Services Programming Guide> 本章描述 ...

  2. hdu2795Billboard(线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=2795 单点更新,树存储的为某一行内剩余的长度 // File Name: hdu2795.cpp // Auth ...

  3. FoxOne---一个快速高效的BS框架

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

  4. vim中systemverilog的高亮显示

    vim中systemverilog的高亮显示 Linux中的vim显示systemverilog语法高亮 windows中的gvim显示systemverilog语法高亮 Linux系统 查看打开vi ...

  5. DataGrid( 数据表格) 组件[8]

    本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...

  6. ASP.NET快速学习方案(.NET菜鸟的成长之路)

    想要快速学习ASP.NET网站开发的朋友可以按照下面这个学习安排进度走.可以让你快速入门asp.net网站开发!但也局限于一般的文章类网站!如果想学习更多的技术可以跟着我的博客更新走!我也是一名.NE ...

  7. ORACLE管理存储结构之物理机构+逻辑结构【weber出品】

    一.数据库的存储结构有物理结构和逻辑结构组成的 物理结构:物理上,oracle是由一些操作系统文件组成的 SQL> select name from v$datafile; NAME ----- ...

  8. OC基础 文件管理

    OC基础  文件管理 1.文件管理类NSFileManager对象的创建: NSFileManager *fm = [NSFileManager defaultManager]; 2.文件操作: (1 ...

  9. C++ 完美破解九宫格(数独)游戏

    看到CSDN上有位大神用C#写了一个破解数独的程序(点击打开链接),不过我对C#也不懂,比较喜欢C++,就用标准C++也写了一个,希望各位喜欢.三纯程序,纯控制台程序,纯各人爱好,纯算法程序,无win ...

  10. HDFS操作--文件上传/创建/删除/查询文件信息

    1.上传本地文件到HDFS //上传本地文件到HDFS public class CopyFile { public static void main(String[] args) { try { C ...