为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
Linux C语言指针与内存_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

Linux C语言指针与内存

DavidChin
难度初级
时长 2小时 5分
  • 使用调试功能 gcc -g

    gdb ---> 断点调试,单点调试

    gcc -g 文件名.c -o 文件名.out ---> 使用gdb编译

    gbd ./文件名 ---> 开始执行db调试

    l:(list)列出源码

    回车继续执行刚刚的命令

    start ---> 开始执行

    break n ---> 截取第n行断点

    print或p a ---> 打印输出变量a

    n ---> 跳到下一行继续执行

    s   ---> step 跳入函数

    bt ---> 查看函数堆栈

    f ---> 切换函数堆

    f 1 ---> 跳转到函数1

    q ---> 退出调试



    查看全部
    1 采集 收起 来源:指针运算

    2019-11-15

  • 32位bit:内存编号只能编到32个二进制位

    操作系统:管理内存,编号,规划。

    用户内存隔离开的好处:

    1. 操作系统的内存不会被大量占用

    2. 避免机器卡住/卡死/死机等状态

    3. 可通过操作系统把应用关闭

    4. 使得操作系统更安全


    查看全部
    0 采集 收起 来源:内存管理

    2019-11-12

  • 栈:先进后出,后进先出。由高地址向低地址放入,先放入的后出,后放入的先出。

    先放入的分配的内存大于后放入的。

    字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端、大端两种字节顺序。小端字节序指低字节数据存放在内存低地址处(由右向左),高字节数据存放在内存高地址处;大端字节序是高字节数据存放在低地址处,低字节数据存放在高地址处(由左向右)。

    示例中的Linux栈内用的就是小端存储(as高字节存放高地址,由上到下)。


    查看全部
  • 变量只是一个名称,来表示一个内存的地址的简称,(变量就是内存)

    而指针则是将变量(对于我们)与地址本质的转化,

    更利于理解。


    http://img1.sycdn.imooc.com//5dcaab170001979802990765.jpg

    堆栈段:

      1. 为函数内部的局部变量提供存储空间。

      2. 进行函数调用时,存储“过程活动记录”。

      3. 用作暂时存储区。如计算一个很长的算术表达式时,可以将部分计算结果压入堆栈。

    数据段(静态存储区):

      包括BSS段(Block Started by Symbol)的数据段。BSS段存储未初始化或初始化为0的全局变量、静态变量,具体体现为一个占位符,并不给该段的数据分配空间,只是记录数据所需空间的大小。数据段存储经过初始化的全局和静态变量。



    查看全部
  • 变量只是一个名称,来表示一个内存的地址的简称,(变量就是内存)

    而指针则是将变量(对于我们)与地址本质的转化,

    更利于理解。

    形象比喻:内存是一个酒店,每个变量就是房间的门牌,通过指针对门牌来找到地址,从而取得里面的东西。

    http://img1.sycdn.imooc.com//5dcaab170001979802990765.jpg

    堆栈段:

      1. 为函数内部的局部变量提供存储空间。

      2. 进行函数调用时,存储“过程活动记录”。

      3. 用作暂时存储区。如计算一个很长的算术表达式时,可以将部分计算结果压入堆栈。

    数据段(静态存储区):

      包括BSS段(Block Started by Symbol)的数据段。BSS段存储未初始化或初始化为0的全局变量、静态变量,具体体现为一个占位符,并不给该段的数据分配空间,只是记录数据所需空间的大小。数据段存储经过初始化的全局和静态变量。



    查看全部
  • 变量只是一个名称,来表示一个内存的地址的简称,(变量就是内存)

    而指针则是将变量(对于我们)与地址本质的转化,

    更利于理解。

    形象比喻:内存是一个酒店,每个变量就是房间的门牌,通过指针对门牌来找到地址,从而取得里面的东西。

    堆栈段:https://img1.sycdn.imooc.com/5d17520a0001979802990765.jpg

      1. 为函数内部的局部变量提供存储空间。

      2. 进行函数调用时,存储“过程活动记录”。

      3. 用作暂时存储区。如计算一个很长的算术表达式时,可以将部分计算结果压入堆栈。

    数据段(静态存储区):

      包括BSS段(Block Started by Symbol)的数据段。BSS段存储未初始化或初始化为0的全局变量、静态变量,具体体现为一个占位符,并不给该段的数据分配空间,只是记录数据所需空间的大小。数据段存储经过初始化的全局和静态变量。


    查看全部
  • 变量只是一个名称,来表示一个内存的地址的简称,(变量就是内存)

    而指针则是将变量(对于我们)与地址本质的转化,

    更利于理解。

    形象比喻:内存是一个酒店,每个变量就是房间的门牌,通过指针对门牌来找到地址,从而取得里面的东西。

    堆栈段:https://img1.sycdn.imooc.com/5d17520a0001979802990765.jpg

      1. 为函数内部的局部变量提供存储空间。

      2. 进行函数调用时,存储“过程活动记录”。

      3. 用作暂时存储区。如计算一个很长的算术表达式时,可以将部分计算结果压入堆栈。

    数据段(静态存储区):

      包括BSS段(Block Started by Symbol)的数据段。BSS段存储未初始化或初始化为0的全局变量、静态变量,具体体现为一个占位符,并不给该段的数据分配空间,只是记录数据所需空间的大小。数据段存储经过初始化的全局和静态变量。


    查看全部
  • 变量只是一个名称,来表示一个内存的地址的简称,(变量就是内存)

    而指针则是将变量(对于我们)与地址本质的转化,

    更利于理解。

    形象比喻:内存是一个酒店,每个变量就是房间的门牌,通过指针对门牌来找到地址,从而取得里面的东西。

    堆栈段:https://img1.sycdn.imooc.com/5d17520a0001979802990765.jpg

      1. 为函数内部的局部变量提供存储空间。

      2. 进行函数调用时,存储“过程活动记录”。

      3. 用作暂时存储区。如计算一个很长的算术表达式时,可以将部分计算结果压入堆栈。

    数据段(静态存储区):

      包括BSS段(Block Started by Symbol)的数据段。BSS段存储未初始化或初始化为0的全局变量、静态变量,具体体现为一个占位符,并不给该段的数据分配空间,只是记录数据所需空间的大小。数据段存储经过初始化的全局和静态变量。


    查看全部
  • *p;指针指向的变量值

     &p;指针自己所在的地址

    标准的C语言中,不允许直接对内存地址进行操作,只能是对操作系统已经分配给的内存空间进行操作。(防止用户自己操作内存地址时侵吞系统内存或者其他程序的内存)

    指针保存的是什么?指针保存的就是内存的地址


    查看全部
    1. 计算机是由逻辑电路元件来组成的

    2. 计算用二进制

    3. 显示为十进制

    4. 编程用十六进制

    5. 内存中最小的单位是字节 1Byte=8bit

    6. 一个十六进制的数字,就可以表示4位二进制数字

    查看全部
  • 使用调试功能 gcc -g

    gdb ---> 断点调试,单点调试

    gcc -g 文件名.c -o 文件名.out ---> 使用gdb编译

    gbd ./文件名 ---> 开始执行db调试

    l:(list)列出源码

    回车继续执行刚刚的命令

    start ---> 开始执行

    break n ---> 截取第n行断点

    print或p a ---> 打印输出变量a

    n ---> 跳到下一行继续执行

    s   ---> step 跳入函数

    bt ---> 查看函数堆栈

    f ---> 切换函数堆

    f 1 ---> 跳转到函数1

    q ---> 退出调试


    查看全部
    0 采集 收起 来源:gdb工具的使用

    2019-11-12

  • void change(int *a,int b)  其中a为指针参数,*+任意参数或者变量均为指针参数或者变量  在调用该函数时需要在参数前+& 即:  change(&a,&b);

    变量前加*号表示加入指针。 在main函数中引用指针时是变量前加&号

    int *a=&b; a是指针,把b的地址赋给a,a指向b

    &表示取地址符

    指针变量不赋初值会出错,temp


    查看全部
  • 因为cpu的地址总线是32位,也就是寻址空间是32位,如果把内存地址比作一户人家的门牌号,那么32位的寻址空间可以给2^32户人家分配门牌号,而计算机中一个内存单位为1个字节,故而32位的操作系统只能使用2^32=(2^10)* (2^10)* (2^10)*( 2^2)=4G字节的内存,这样说应该很清晰了

    查看全部
    0 采集 收起 来源:内存管理

    2019-11-12

  • void change(int *a,int b)  其中a为指针参数,*+任意参数或者变量均为指针参数或者变量  在调用该函数时需要在参数前+& 即:  change(&a,&b);

    变量前加*号表示加入指针。 在main函数中引用指针时是变量前加&号

    int *a=&b; a是指针,把b的地址赋给a,a指向b

    &取地址符

    指针变量不赋初值会出错,temp


    查看全部
  • gdb 断点调试,单点调试

    gcc -g  文件名.out -o   文件名 .out 使用gdb编译

    gbd ./文件名.out  执行

    (gdb) l  或list  显示源代码

    l:(list)列出源码

    回车继续执行刚刚的命令

    start开始执行

    break n ---> 截取第n行断点

    print或p a 打印输出a

    n 跳到下一行

    s 进入函数

    bt 查看函数堆栈

    f 切换

    f 1 跳转到函数1

    q 退出调试



    查看全部
    1 采集 收起 来源:gdb工具的使用

    2019-11-12

  • 1 指针 数组 字符串

    2 堆内存 栈内存

    3 GDB  调试工具


    查看全部
  • 自由可分配内存

    查看全部
    0 采集 收起 来源:内存管理

    2019-11-06

  • 用户内存隔离开的好处

    查看全部
    0 采集 收起 来源:内存管理

    2019-11-06

  • 一个内存的最小存储单位1个字节

    查看全部
    0 采集 收起 来源:内存管理

    2019-11-06

举报

0/150
提交
取消
课程须知
本课程是C语言中级课程,为了更好的学习效果: 1、需要有一定的C语言基础,如果没有基础的同学可以看《C语言入门》这门课。 2、本课程是在Linux环境下讲解,需要熟悉一些Linux命令。如果不了解的话可以在《Linux C语言编程基本原理与实践》这门课程中补充
老师告诉你能学到什么?
1、C语言中的指针是怎么回事 2、Linux下gdb调试工具是怎样使用的 3、指针与内存有着怎样的关系 4、数组与字符串之间的联系
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!