今天来学习一下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. 寒武纪camp网络测试赛

    寒武纪camp网络测试赛 地址:oj点我进入 A(树形dp+树链剖分) 题意: 分析: 考虑树形dp,f0(x)和f1(x)分别表示以x为根的子树,不取x点或取x点的最大合法子集的元素个数 那么对于一 ...

  2. Using DTrace to Profile and Debug A C++ Program

    http://www.oracle.com/technetwork/server-storage/solaris/dtrace-cc-138561.html

  3. zmq.error.ZMQError: Address already in use

    1.如下代码,启动的时候python app.py会报如题的错误 app.py #!/user/bin python # -*- coding:utf-8 -*- import os from dat ...

  4. leetcode笔记:Longest Substring Without Repeating Characters

    一. 题目描写叙述 Given a string, find the length of the longest substring without repeating characters. For ...

  5. sudo 用户添加

    sudo 用户添加 /etc/sudoers 在 ## Allow root to run any commands anywhere root    ALL=(ALL)   ALL 下面加上 xxx ...

  6. History(历史)命令用法 15 例

    如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率.本文将通过实例的方式向你介绍 history 命令的 15 个用法. 使用 HISTTIMEFORMAT ...

  7. 判断所ping主机的操作系统

    根据它的值判断所ping主机的操作系统类型. TTL被称为生存期,也就是你所传输的数据在网络上经过的路由器的最大个数. 操作系统 TTLLINUX 64WIN2K/NT 128WINDOWS 系列 3 ...

  8. hive计算网页停留时长

    hive表结构例如以下: create table pv_user_info( session_id string, user_id string, url string, starttime big ...

  9. Intellig Idea2017新建Web项目(tu'wen)

    1.新建新工程项目 2.选择Java 和JDK版本 3.下一步Next(默认不勾选) 4.设置Project Name ,点击More Setting图标可以折叠.展开  然后Finish 我们可以看 ...

  10. 2016/05/06 Sublime Text 3 常用插件以及安装方法(转)

    http://www.cnsecer.com/460.html 安装Sublime Text 3插件的方法: 朋友们,小站活着不容易,全靠广告费养着了,如果本文对你有帮助.麻烦动下手点下页面的广告吧, ...