zoukankan      html  css  js  c++  java
  • 侯捷老师C++基础课程笔记7-栈、堆和内存管理

    P7栈、堆和内存管理

    栈Stack

    存在于某作用域的内存空间,当调用函数时,函数本身会形成一个stack来放置它所接收的参数以及返回地址,当离开该作用域时,该stack空间自动释放

    堆Heap

    是系统内存,是由操作系统提供的一块global内存空间,程序可以用new和delete动态分配和管理其中的内存。

    new关键字进行内存动态分配的内部细节

    Complex *pc = new Complex(1,2);

    在编译器下面转化为三个步骤

     

    1.使用函数“operator new”分配内存

      Void* mem = operator new(sizeof (Complex) );

    “operator new”函数内部调用malloc(n);

     

    2.指针类型转型

      pc = static_cast<Complex*>(mem);

     

    3.调用构造函数

      pc ->Complex::Complex(1,2);

     

    Delete关键字进行内存动态分配的内部细节

    String* ps = new String("Hello");

    ...

    Delete ps;

    在编译器下面转化为两个步骤

     

    1.调用析构函数

    String::~String(ps);

     

    2.使用“operatpr delete”函数释放内存

    Operator delete(ps);

    “operator delete”函数内部调用free(n);

     

    动态分配所得的内存块

    new

    1.上下有两个cookie 各占4个byte,最后一位只能为0或1,0代表未使用,1代表正在使用,从第二位开始代表该内存块大小

    2.内存块大小要以16byte为倍数

    array new( new[] )

    在分配的内存前面增加4个byte记录分配的数组个数。

  • 相关阅读:
    dubbo注册服务IP解析异常及IP解析源码分析
    Linux下安装并破解StarUML
    Mysql中int(1)的误解及说明
    grep参数说明及常用用法
    ubuntu中使用nginx把本地80端口转到其他端口
    IDEA下安装/配置Jrebel
    Eclipse下安装/配置Jrebel6.X
    shell脚本问题read: Illegal option -t
    docker pull 提示错误的username or password
    linux 安装 rpm 的jdk
  • 原文地址:https://www.cnblogs.com/garychen97/p/13570716.html
Copyright © 2011-2022 走看看