zoukankan      html  css  js  c++  java
  • linux内存分析

    1.在linux系统中,执行gcc命令是将我们的C语言程序转换成二进制可执行文件,其中linux的二进制可执行文件中,对每个对应的资源进行了划分,我们可以控制的主要有以下几种:

      1).data:用来存放已经初始化的全局变量或者static修饰的变量

      2).bss:用来存放未初始化的全局变量或者static修饰的变量

      3).init:程序的入口段落

      4).text:程序的可执行文本段落

      5).fini:程序的出口段落

      6).rodata:程序的常量段落

      7)堆:程序的临时变量存放区域

      8)栈:我们自己手动申请的内存区域

      9)映射段落:映射库以及其他资源的段落

      10)高地址命令行段落:用来存放运行程序的环境变量以及命令行参数

     总结:

      1)全局变量或者是static修饰的变量如果没有初始化,它们的值为0。

      2)局部变量的值在栈中,栈由于是自动分配以及释放的,如果它们没有赋初值,那么它们的值是不确定的。

      3)我们不应该定义太多全局变量,因为全局变量是在程序一开始就分配好内存的,伴随着程序终身,全局变量越多,程序就越臃肿。

      4)栈的内存大小默认是2-8M(当前的ubuntu是8M),所以临时变量不宜申请太多,如果需要用到大量的内存,建议用堆内存。

     2.堆内存的操作

      1.堆申请的内存是没有初始化的

      2.free清理掉的内存,它的指针并不会被清空,它的内容也不会被清空,只是我们不能够再用了,因为不知道什么时候这片内存回给别人用了,如果再去用这片内存,就会内存越界(内存泄漏经典题目)。

      3.申请的内存用完之后一定要释放,不然会一直占用着内存。

      4.操作的函数

        1)申请内存

          void *malloc(size_t size);

          void *calloc(size_t n,size_t size);//申请n块size这么大的内存

        2)释放内存

          void free(void *ptr);

        3)重置申请的内存大小

          void *realloc(void *ptr,size_t size);//ptr是已经申请的内存地址,size是要重置的大小,本身在内存中的数据是不会丢失的,成功之后返回新的内存地址,一定要替换ptr的值。

          例子:ptr = realloc(ptr,100);

    3.作用域

      1)代码块作用域:在{ }里面定义的变量,只能够在{ }里面使用,在外面是访问不到的。(临时变量)

      2)函数原型作用域:在函数里面定义的变量,只能够在函数里使用。(临时变量)

      3)文件作用域:用static修饰的,只能够在当前文件使用。

    PS:如果有错误麻烦指出来,大家互相学习 0-0

  • 相关阅读:
    Windows Server 2003 SP2(32位) 中文版 下载地址 光盘整合方法
    用Recycle()方法对Java对象的重要性
    Lotus中千奇百怪的 $$
    Developing a simple application using steps "User Decision" and "Mail"(1) 沧海
    沟通中的情绪管理(演讲稿) 沧海
    人只有在压力之下,才可能成功,没做一件事,都必须成功,不许言败 沧海
    什么是IDOC,以及IDOC的步骤 沧海
    VS2008 Professional Edition CHS中的deffactory.dat读取错误 沧海
    Including custom text in the step "User Decision" 沧海
    SAP Upgrade Strategy 沧海
  • 原文地址:https://www.cnblogs.com/smallqizhang/p/12359647.html
Copyright © 2011-2022 走看看