内存分布(以及new,delete)

news2024/9/23 20:25:15

今天给大家说下内存分布,我们都知道的是,像局部变量都在栈区,但是像我们自己有时候申请的空间都在堆区,当然,内存分布不只只是栈区和堆区,还有常量区,代码区等等。如下图:

 这就是内存大概得分布,我们要知道的是,其实就能4G的内存来说,用户空间总共占用3G,内核空间总共占用1G。

而对于C语言来说,像malloc,realloc等函数,申请的空间在堆区,但是不会初始化数据,像calloc会初始化数据,但是在C++中,new是一个关键字,没错,他不是一个函数,他是一个关键字。它在申请自定义类型的时候,会自动调用构造函数,也就是说,他会初始化数据。C语言中的free这个函数是释放空间的,而有些时候我们动态申请的在定义类型的时候,我们要是在释放这个申请的自定义类型的时候,如果这个自定义类型的内部如果要是还有动态申请的空间,此时就会造成内存泄漏。而C++中的delete关键字,他会和new一样,会自动调用这个自定义类型的析构函数。

那么,神秘的new,delete到底是怎么实现的呢?我们来看看下面的这个代码:

#include <iostream>
using namespace std;
class Date
{
public:
    Date()
        : day(0)
        , month(0)
        , year(0)
    {}
    ~Date()
    {
        day=month=year=1;
    }
private:
    int day;
    int month;
    int year;
};
int main()
{
    Date* p=new Date;
    delete p;
    return 0;
}

先来看看new到底是如何实现的,如下:

 

 我们可以看到的是,new其实是底层调用了operator new这个函数,然后开辟空间用的还是malloc,所以,变来变去底层用的还是malloc。然后调用完operator new这个函数,又会自动调用我们定义的Date这个类的构造函数。而delete基本也是这个原理如下:

 这就是delete的底层原理,他会先调用析构函数清理空间,然后在调用operator delete 函数来释放空间,而其实说白了,operator delete 底层也是free这个函数释放空间,只不过是条件编译等等,看起来很复杂,我们虽然看不懂汇编代码,但是看个大概意思猜一下就出来了。

以上就是本篇所有的内容了,如果有收获的话,希望点一下赞把!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/908460.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目实战笔记4:敏捷

术语介绍 敏捷项目管理是一种以快速响应变化为核心的项目管理方法。与传统的瀑布模型不同&#xff0c;敏捷方法强调迭代开发和紧密的团队合作。其目的是尽可能快地交付可用的产品&#xff0c;然后在客户和团队之间进行反馈和迭代&#xff0c;以不断优化产品和开发过程。 在敏捷…

电商转化率是什么意思,怎么计算和提高电商转化率?

电商转化率是指访问电商网站的用户中&#xff0c;实际完成购买行为的比例。它可以衡量电商网站的销售能力和用户转化效果&#xff0c;是衡量电商运营效果的重要指标之一。 一、电商转化率的计算公式 电商转化率的计算公式为&#xff1a;转化率完成购买的用户数/访问网站的用户…

PyTorch DataLoader 报错 “DataLoader worker exited unexpectedly“ 的解决方案

注意&#xff1a;博主没有重写d2l的源代码文件&#xff0c;而是创建了一个新的python文件&#xff0c;并重写了该方法。 一、代码运行日志 C:\Users\Administrator\anaconda3\envs\limu\python.exe G:/PyCharmProjects/limu-d2l/ch03/softmax_regression.py Traceback (most r…

Python Opencv实践 - 图像中值滤波

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) print(img.shape) pixel_count img.shape[0] * img.shape[1] print(pixel_count)#为图像添加椒盐噪声 #参考资料&#xf…

Java后端开发面试题——框架篇

Spring框架中的bean是单例的吗&#xff1f;Spring框架中的单例bean是线程安全的吗&#xff1f; singleton : bean在每个Spring IOC容器中只有一个实例。 prototype&#xff1a;一个bean的定义可以有多个实例。 Spring bean并没有可变的状态(比如Service类和DAO类)&#xff0c…

Masterstudy主题 - 用于线上教育、在线学习和在线课程的LMS WordPress主题

Masterstudy主题是每个人的最佳选择&#xff01;它是一个完整的线上教育WordPress主题&#xff0c;适合所有想要创建在线课程、辅导和语言中心、在线学习平台并在全球范围内传播知识的人。这是一个完美的教育主题&#xff0c;旨在满足学习行业的需求。 网址&#xff1a;Master…

Python功能制作之简单的音乐播放器

需要导入的库&#xff1a; pip install PyQt5 源码&#xff1a; import os from PyQt5.QtCore import Qt, QUrl from PyQt5.QtGui import QIcon, QPixmap from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent from PyQt5.QtWidgets import QApplication, QMainWind…

GPT-3.5——从 人工智障 到 大人工智障

有人说&#xff0c;GPT是从人工智障到人工智能的蜕变&#xff0c;但是。。。 我认为&#xff0c;GPT是从 人工智障 到 大人工智障 的退化。。。 从 人工智障 到 大人工智障 GPT-3.5学术介绍No.1---- 西红柿炒钢丝球基本信息详细制作方法材料步骤 幕后花絮 No.2---- 顶尖数学家…

MySQL高级篇——MySQL架构篇1(Linux下MySQL8的安装与使用)

目录 0 安装前0.1 Linux系统及工具的准备0.2 查看是否安装过MySQL0.3 MySQL的卸载 1 MySQL8的Linux版安装1.1 MySQL的4大版本1.2 下载MySQL指定版本1.3 CentOS7下检查MySQL依赖1.4 CentOS7下MySQL安装过程 2 MySQL登录2.1 首次登录2.2 修改密码2.3 设置远程登录 3 MySQL 8 的密…

Jmeter —— 自动录制脚本

目录 目录 1、Jmeter配置 1.1新增一个线程组 1.2Jmeter中添加HTTP代理 1.3配置HTTP代理服务器 2、录制脚本 2.1配置本地代理 2.2访问页面进行操作 2.3脚本处理 1、Jmeter配置 1.1新增一个线程组 1.2Jmeter中添加HTTP代理 1.3配置HTTP代理服务器 修改端口 修改Target…

嵌入式基础知识-中断处理过程

本篇来介绍中断&#xff0c;这是计算机系统以及嵌入式系统的重要概念。 1 中断基本概念 中断是CPU对系统发生的某个事件作出的一种反应。 中断的一些基本概念&#xff1a; 中断源&#xff1a;引起中断的事件称为中断源中断请求&#xff1a;中断源向CPU提出处理的请求称为中断…

excel文本函数篇1

本期主要介绍LEFT、RIGHT、MID以及后面加B的情况&#xff1a; &#xff08;1&#xff09;后缀没有B&#xff1a;一个字节代表一个中文字符 &#xff08;2&#xff09;后缀有B&#xff1a;两个字节代表一个中文字符 &#xff08;3&#xff09;LEFT()从前面开始找&#xff0c;RI…

【腾讯云 TDSQL-C Serverless 产品体验】基于腾讯云轻量服务器以及 TDSQL-C 搭建 LNMP WordPress 博客系统

文章目录 一、前言二、数据库发展与云原生数据库2.1 数据库发展简介2.2 云原生数据库简介2.2.1 云数据库与云原生数据库区别 三、腾讯云 TDSQL-C 数据库3.1 什么是腾讯云 TDSQL-C 数据库3.2 为什么推出 TDSQL-C 数据库&#xff1f;传统 MySQL 架构存在较多痛点3.2.1 传统 MySQL…

【Linux】cpolar+JuiceSSH实现手机端远程连接Linux服务器

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …

Amelia预订插件:WordPress企业级预约系统

并非所有WordPress预订插件都像他们所设计的那样。其中一些缺乏运行高效预约操作所需的功能&#xff0c;而其他一些则看起来陈旧过时。您不需要其中任何一个&#xff0c;但Amelia预订插件似乎希望确保所有用户都对功能和风格感到满意。 在这篇Amelia企业级预约系统插件评测中&…

内网渗透神器CobaltStrike之BOF编写(十一)

前言 Beacon Object File(BOF) 从Cobalt Strike4.1开始所添加的新功能&#xff0c;它允许你使用C语言编写扩展来扩展Beacon的功能。这些扩展可以在运行时直接加载到Beacon的内存中并执行&#xff0c;无需在目标机器的磁盘上创建任何文件 BOF的一个关键特性是它的运行时环境非…

生物识别技术与身份认证:探讨生物识别技术在强化身份认证和访问控制方面的应用

第一章&#xff1a;引言 在数字化时代&#xff0c;随着信息技术的飞速发展&#xff0c;身份认证和访问控制变得越来越重要。传统的用户名和密码方式逐渐暴露出安全性不足的问题&#xff0c;为此&#xff0c;生物识别技术应运而生。生物识别技术利用人体生物特征来识别个体身份…

HoudiniVex笔记_P25_ForceExtended力进阶

原视频&#xff1a;https://www.youtube.com/playlist?listPLzRzqTjuGIDhiXsP0hN3qBxAZ6lkVfGDI Bili&#xff1a;Houdini最强VEX算法教程 - VEX for Algorithmic Design_哔哩哔哩_bilibili Houdini版本&#xff1a;19.5 如有错误&#xff0c;可在评论区指正。 1、本章主要…

sql数据导出到excel

一、打开Navicat Premium 12 二、导出

管理类联考——逻辑——真题篇——按知识分类——汇总篇——三、综合推理——是否确定信息

真题&#xff08;2018-40&#xff09;——综合推理——是否确定信息——确定信息——以确定信息作为解题起点 某海军部队有甲、乙、丙、丁、戊、己、庚7艘舰艇&#xff0c;拟组成两个编队出航&#xff0c;第一编队编列3艘舰艇&#xff0c;第二编队编列4艘舰艇&#xff0c;编列…