今天来学习一下c语言类型修饰符及内存分布

1、auto int a;

默认在内存

2、register int a;

限制变量定义在寄存器上的修饰符

编译器会尽量安排CPU的寄存器去存放这个a,如果寄存器不足,a还是放在内存中

取地址符号&对a不起作用

3、static

应用场景:

1、函数内的变量

2、函数外的变量

3、函数的修饰符(函数也是一个变量)

int fun() -->  static int fun()

第一、修饰局部变量的时候,局部变量不在栈空间,放到全局的数据段,延长了局部变量的生命周期,直到程序运行结束以后才释放。

第二、static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。

第三、static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static修饰的局部变量存放在全局数据区的静态变量区。初始化的时候自动初始化为0;

4、const

只读的变量

const char *p;// p可以变,指向的内容不可变,主要用于字符

char * const p; //p不可以变,指向的内容可以变,主要用于硬件资源(LCD)

双引号是整型常量,相当于const

char *p="hello world";

*p='a';会报错,不能对修改常量

5、volatile

告知编译器编译方法的关键字,不优化编译

修饰变量的值的修改,不仅仅可以通过软件,也可以通过其他方式(硬件外部的用户)

volatile char *p;

while(*p ==0x00);//当按键按下后,跳出循环

会一直判断,而不会被系统优化掉,变成死循环

内存

——————————————————————

内核空间  应用程序不允许访问

——————3g

栈空间  局部变量

————

运行时的堆空间 malloc

————

全局的数据空间(初始化,未初始化)

只读数据段 “hello world”                   静态空间

代码段   code

————

0x00

——————————————————————

堆、栈、制度空间

栈空间

局部变量存储在栈空间中,当函数执行完后,局部变量出栈,相当于失效了

生存周期短

堆空间

运行时,可以自由,自我管理的分配和释放的空间,生存周期是由程序员来决定

分配  malloc(),返回分配好的地址

char *p;

p=(char *)malloc(5*sizeof(char));

if(p == NULL){

error

}

最后必须用free(p);把空间释放, 防止内存泄漏

c语言类型修饰符及内存的更多相关文章

  1. [面试]volatile类型修饰符/内存屏障/处理器缓存

    volatile类型修饰符 本篇文章的目的是为了自己梳理面试知识点, 在这里做一下笔记. 绝大部分内容是基于这些文章的内容进行了copy+整理: 1. http://www.infoq.com/cn/ ...

  2. C++变量内存分配及类型修饰符

    前言 了解C++程序内存分配,有助于深刻理解变量的初始化值以及其生存周期.另外,变量类型修饰符也会影响到变量的初始化值及其生存周期.掌握了不同类型变量的初始化值及其生存周期,能够让我们设计程序时定义变 ...

  3. C++11常用特性介绍——auto类型修饰符

    1.C++11常用特性介绍 从本篇开始介绍C++11常用特性,大致分:关键字及新语法.STL容器.多线程.智能指针内存管理,最后讲一下std::bind和std::function 二.关键字和新语法 ...

  4. JAVA类型修饰符(public,protected,private,friendly)

    JAVA类型修饰符(public,protected,private,friendly) public的类.类属变量及方法.包内及包外的不论什么类均能够訪问:protected的类.类属变量及方法,包 ...

  5. volatile 类型修饰符

    volatile 类型修饰符 1.解释 就像大家更熟悉的const一样,volatile是一个类型修饰符(type specifier).它是被设计用来修饰被不同线程访问和修改的变量.如果不加入vol ...

  6. C语言常用修饰符

    前言 这两天在梳理自己C语言的知识,发现写了这么久的代码,居然所有的知识点都在自己的脑袋里.这可不好,万一老了呢.... 接下来的几天里,会以文字的形式,将这些知识整理出来,分享给大家. 想要看看英文 ...

  7. Linux学习---类型修饰符

    auto eg:aoto int a;   默认情况--------->分配的内存可读可写的区域. register eg:register int a; 限制变量定义在寄存器上的修饰符 定义一 ...

  8. 编程语言的类型修饰符modifiers

    编程语言修饰符,代表语言要素与常规表达不同的语义: 这些语义的不同需要编译器和运行时作出不同的解释: 作用域.访问: 生命周期: 同步异步: 多态: 纯函数: 注解: 懒加载: 编译器合成:

  9. printf(),类型修饰符

    %s, 将输出作为字符串,要一直找到结束符'\0',这样在内存访问中,如果访问的是char 类型的,就会出现,从起始位置一直访问把整个申请的内存空间都遍历没有找到'\0',就会出现segment fa ...

随机推荐

  1. MongoDB学习day08--mongoose预定义修饰符和getter、setter修饰符

    一.mongoose预定义修饰符 lowercase. uppercase . trim var UserSchema=mongoose.Schema({ name:{ type:String, tr ...

  2. 转 Linux里设置环境变量的方法(export PATH)

    1.动态库路径的设置 Linux下调用动态库和windows不一样.linux 可执行程序是靠配置文件去读取路径的,因此有些时候需要设置路径 具体操作如下export LD_LIBRARY_PATH= ...

  3. Java获取Linux系统cpu使用率

    原文:http://www.open-open.com/code/view/1426152165201 import java.io.BufferedReader; import java.io.Fi ...

  4. Client使用c#和odp.net连接server oracle

    http://blog.csdn.net/educast/article/details/6605655 Oracle.DataAccess.dll有2.X版本和4.X版本,VS2008开发用2.X ...

  5. Ulua_toLua_基本案例(一)

    Ulua_toLua_基本案例 在Untiy中用Lua.必需要LuaInterface.LuaInterface的介绍请看:点击打开链接 能够先光写Lua,生成.lua的纯文件.再Unity中通过,l ...

  6. Spark应用远程调试

    本来想用Eclipse的.然而在网上找了一圈,发现大家都在说IntelliJ怎样怎样好.我也受到了鼓励,遂决定在这台破机器上鼓捣一次IntelliJ吧. Spark程序远程调试,就是将本地IDE连接到 ...

  7. 怎样用Google APIs和Google的应用系统进行集成(8)----怎样把Google Blogger(博客)的JSON Schema转换成XML的Schema(XSD)?

    在Google RESTFul API中,Google Blogger API(Google博客API)应该和我们的生活离得近期:由于差点儿非常多人每天都在看博客,都在写博客,都听说过博客.在前面的G ...

  8. Oracle学习(18)【DBA向】:分布式数据库

    分布式数据库 什么是分布数据库? l数据物理上被存放在网络的多个节点上,逻辑上是一个总体. 分布式数据库的独立性 l分布数据的独立性指用户不必关心数据怎样切割和存储,仅仅需关心他须要什么数据. Ora ...

  9. Visual Studio Code Unit Testing

    1.NUnit project.json { "version": "1.0.0-*", "testRunner": "nunit ...

  10. [办公应用]如何在WORD中让英文网址可以在字符中间换行

    有时候我们写文章,存在中英文混合录入的情况.一般情况下,office 2003的word软件中,会自作聪明的避免单词断行显示,也就是说它会默认尽量把一个单词显示在某一行内,从而避免单词被分开.但有时候 ...