虚函数表存储的位置(解析C++内存分配及其编译分段)

news2025/1/10 3:20:08

先上结论:C++虚函数表保存在.rdata只读数据段。编译时期由编译器确定虚函数表。虚函数表属于类,类的所有对象共享这个类的虚函数表。
在这里插入图片描述

c/c++的内存分配

  1. 栈(stack):又称堆栈,栈是由编译器自动分配释放,存放函数的参数值,局部变量的值等(但不包括static声明的变量,static意味着在数据段中存放变量)。除此之外,在函数被调用时,栈用来传递参数和返回值。由于栈的先进后出的特点,所以栈特别方便用来保存/恢复调用数据。其操作方式类似于数据结构中的栈。
  2. 堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小,并不固定,可动态扩张或缩放。当进程调用malloc/free等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张)/释放的内存从堆中被提出(堆被缩减)。堆一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
  3. 全局数据区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和静态变量在相邻的另一块区域。
    文字常量区:常量字符串就是放在这里,程序结束后由系统释放。
  4. 程序代码区:存放函数体的二进制代码

C语言在编译和连接后,将分成代码段(Text)、只读数据段(ROData)和读写数据段(RWData)。在运行时,除了以上三个区域外,还包括未初始化数据段(BSS)区域和堆(Heap)区域和栈(Stack)区域。

  1. .bss BSS段(bss segment):通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS段属于静态内存分配。
  2. .RW data数据段(data segment):通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。
  3. .RO data只读数据段:只读数据段是程序使用的一些不会被更改的数据,使用这些数据的方式类似查表式的操作,由于这些变量不需要更改,因此只需要放置在只读存储器中即可。
  4. .text代码段(code segment/text segment):通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行之前就已经确定,并且内存区域通常属于只读,某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。程序段为程序代码在内存中的映射,一个程序可以在内存中有多个副本。
    在这里插入图片描述

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

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

相关文章

hive location更新hive元数据表详解

1.hive location更新方式 一、通过修改表DDL: alter table table_name set location hdfs://nm:8020/table_path 二、直接修改hive 的meta info: update DBS set DB_LOCATION_URI replace(DB_LOCATION_URI,"oldpath","newpath")update SDS…

如何将两台Mac显示器设置为单个屏幕配置

​能够在扩展模式下将两个或多个外部显示器连接到Mac是一种解放的屏幕体验,但当每个显示器仍然像独立显示器一样工作时,会导致沮丧。 在这里,我们向你展示如何通过对系统设置进行一些简单的更改,使两个扩展屏幕看起来像一个屏幕。…

如何get一个终身免费续期的定制数字人?

想拥有一个“数字分身” 吗?给你一个终身免费续期的特权。 定制周期长?训练、运营成本高?成片效果生硬?无法应用于实际场景? 随着AIGC技术的快速发展,虚拟数字人的生成效率不断提高,训练成本逐…

Android平台GB28181接入SDK

华脉智联推出的Android平台GB28181接入SDK,可实现不具备国标音视频能力的 Android终端,通过平台注册接入到现有的GB/T28181—2016服务,可用于如执法记录仪、智能安全帽、智能监控、智慧零售、智慧教育、远程办公、明厨亮灶、智慧交通、智慧工…

苹果和富士康加速撤离的后果显现了,或将失去中国这个最大市场

日前网络流传的消息指特定群体将不能在公众场合使用iPhone,这直接导致苹果的市值暴跌万亿元人民币,凸显出中国市场对苹果的巨大影响,如今中国已是苹果最大的收入来源市场,今年二季度中国首次超过美国成为iPhone销量第一的市场。 苹…

网络协议百科全书:28张图带你搞懂TCP

大家好,我的网工朋友。 不仅仅是网工,只要你是做IT相关的工作,肯定都离不开网络。 那网络中最重要的协议,大概非TCP莫属,谁去面试没被问过网络协议的相关问题? 谁没买过那本最经典的《TCP/IP详解》 。 …

HAM高可用配置及故障切换

1.什么是 MHA MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的…

AIGC:【LLM(七)】——Baichuan2:真开源可商用的中文大模型

文章目录 一.模型介绍二.模型部署2.1 CPU部署2.2 GPU部署 三.模型推理3.1 Chat 模型推理3.2 Base 模型推理 四.模型量化4.1 量化方法4.2 在线量化4.3 离线量化4.4 量化效果 五.模型微调5.1 依赖安装5.2 单机训练5.3 多机训练5.4 轻量化微调 一.模型介绍 Baichuan 2 是百川智能…

Learning From Data 中英文对照 1.THE LEARNING PROBLEM (第6页)

1.1. PROBLEM SETUP 图1.3:在二维输入空间中直线可分数据的感知器分类(A)一些训练示例将被错误分类(红色区域的蓝色点,反之亦然),用于定义分离线的权重参数的某些值。(B)。最后一种假设将所有的训练样本分类正确。(O是1,x是-1) …

基于Python和mysql开发的今天吃什么微信小程序(源码+数据库+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python和mysql开发的今天吃什么微信小程序(,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目…

Android USB电源管理

The USB peripheral detects the lack of 3 consecutive SOF packets as a suspend request from the USB host. 1 驱动shutdown顺序 系统关机或重启的过程中,会调用设备驱动的shutdown函数来完成设备的关闭操作,有需要的设备可以在驱动中定义该函数。其…

【实操干货】如何开始用Qt Widgets编程?(五)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 在本文中&#xff0…

PHPWord 模板输出checkbox复选框和checked已勾选状态,以及 模板替换时数据如何分行

PHPWord 模板输出checkbox复选框和checked已勾选状态,以及 模板替换时数据如何分行 期望目标 和 模板配置复选框代码数据分行显示在使用PHPWORD模板替换时,经常会有 动态渲染选择项 和 选择项需要被勾选的要求,以及动态数据分行显示等要求。 本文根据 空复选框、勾选复选框…

加强身份验证安全性:深入了解身份证二要素核验API

前言 在数字化时代,随着在线业务和电子交易的不断增加,确保用户的身份安全变得至关重要。身份验证是许多行业的核心要素,从金融机构到电子商务,从社交媒体到医疗保健,都需要有效的方式来确认用户的真实身份。传统的用…

《向量数据库指南》——向量数据库的底层原理是什么?

向量数据库的底层实现原理可以根据具体的数据库系统和索引方法而有所不同。不同的向量数据库可能使用不同的数据结构和算法来支持高效的向量存储和相似性搜索。以下是一些常见的底层实现原理和概念: 1、向量存储: 数据结构:向量数据库通常使用数据结构来存储向量数据。这些数…

MOTOROLA MVME5500 电源模块

MOTOROLA MVME5500 MOTOROLA MVME5500 电源模块通常是用于 MVME5500 控制主板模块的附属设备,其主要功能是为主板和相关外围设备提供电力供应和管理。以下是通常情况下MOTOROLA MVME5500 电源模块的产品功能: 电源输出:MOTOROLA MVME5500 电源…

在Ubuntu上建立博客网站,利用Cpolar+Inis快速实现专业写作

文章目录 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道(云端设置)2.3.Cpolar稳定隧道(本地设置) 3. 公网访问测试总…

从 Clickhouse 到 Apache Doris:有赞业务场景下性能测试与迁移验证

本文导读: 当前,电商运营的主要痛点不仅来自多变的市场和客户需求,也受困于碎片化用户触达等带来的竞争与挑战。为了深度挖掘用户价值、培养用户忠诚度、实现业绩增长,有赞为商家搭建了全方位 OLAP 分析系统,提供实时…

mysql技术文档--mysql锁专精--锁全解!!!

简单认识: 在使用MySQL数据库时,锁可用于控制并发访问和修改数据库中的数据。它们确保在某个事务正在读取或修改数据时,其他事务不能同时对同一数据进行读取或修改操作。 MySQL提供了多种类型的锁,包括共享锁(Shared …

Spring Cloud学习笔记【消息总线-SpringCloud Bus】

SpringCloud Bus概述 概述 Spring Cloud Bus是Spring Cloud生态系统中的一个组件,用于实现微服务架构中的消息总线。它利用了轻量级消息代理(如RabbitMQ或Kafka)作为通信中间件,实现了在分布式系统中的消息传递和事件广播。 Sp…