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记录分配的数组个数。

  • 相关阅读:
    Spring 源码学习
    Feign Client 原理和使用
    算法基础:排序算法看这一篇就够了
    Spring 源码学习2
    Spring 源码学习
    最优包裹组合-贪心算法
    @Transactional 事务的底层原理
    Mysql索引扫盲总结
    snowflake原理解析
    分布式ID总结
  • 原文地址:https://www.cnblogs.com/garychen97/p/13570716.html
Copyright © 2011-2022 走看看