• 侯捷老师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记录分配的数组个数。

  • 相关阅读:
    Lambda Expression in C#
    DirectorySearcher LDAP
    摘录 LDAP
    The return types for the following stored procedures could not be detected
    无法调试存储过程,无法启动T-SQL调试
    根据窗口句柄显示窗体
    还原数据库时提示空间不足
    xml格式发送
    ../ 上一级目录
    匿名函数 invoke
  • 原文地址:https://www.cnblogs.com/garychen97/p/13570716.html
Copyright © 2020-2023  润新知