一个关于结构体性能和内存分配的问题

news/2025/10/15 3:31:24/文章来源:https://www.cnblogs.com/Reimual/p/19142445

在菜鸟教程上学习C#结构体这一节时(https://www.runoob.com/csharp/csharp-struct.html),里面提到了一个关于结构体性能和内存分配的问题:“结构体是值类型且在栈上分配内存;而类是引用类型,可能涉及更多的内存开销和管理。”于是在vs2022环境下对代码进行了反汇编。

using System;/*原代码*/namespace HelloWorld
{class Program{struct Struct{public string str;}class Class{public string str = new string("Where there is a will, there is a way !");}static void Main(string[] args){Struct s1 = new Struct();s1.str = "Hello, World!";Struct s2 = s1;Class c1 = new Class();}}
}

# 反汇编代码static void Main(string[] args){
088F3EF8  push        ebp  
088F3EF9  mov         ebp,esp  
088F3EFB  push        edi  
088F3EFC  push        esi  
088F3EFD  push        ebx  
088F3EFE  sub         esp,3Ch  
088F3F01  vxorps      xmm4,xmm4,xmm4  
088F3F05  vmovdqu     xmmword ptr [ebp-48h],xmm4  
088F3F0A  vmovdqu     xmmword ptr [ebp-38h],xmm4  
088F3F0F  vmovdqu     xmmword ptr [ebp-28h],xmm4  
088F3F14  xor         eax,eax  
088F3F16  mov         dword ptr [ebp-18h],eax  
088F3F19  mov         dword ptr [ebp-14h],eax  
088F3F1C  mov         dword ptr [ebp-38h],ecx  
088F3F1F  cmp         dword ptr ds:[898A788h],0  
088F3F26  je          HelloWorld.Program.Main(System.String[])+035h (088F3F2Dh)  
088F3F28  call        542824F0  
088F3F2D  nop  Struct s1 = new Struct();
088F3F2E  xor         ecx,ecx  
088F3F30  mov         dword ptr [ebp-3Ch],ecx  s1.str = "Hello, World!";
088F3F33  mov         dword ptr [ebp-3Ch],8B5623Ch  Struct s2 = s1;
088F3F3A  mov         ecx,dword ptr [ebp-3Ch]  
088F3F3D  mov         dword ptr [ebp-40h],ecx  Class c1 = new Class();
088F3F40  mov         ecx,0AEEDC9Ch  
088F3F45  call        CORINFO_HELP_NEWSFAST (051E300Ch)  # 有关内存分配的一个函数(Copilot AI解释)
088F3F4A  mov         dword ptr [ebp-48h],eax  
088F3F4D  mov         ecx,dword ptr [ebp-48h]  
088F3F50  call        HelloWorld.Program+Class..ctor() (0AF09AD0h)  # 构造函数(Copilpt AI解释)
088F3F55  mov         eax,dword ptr [ebp-48h]  
088F3F58  mov         dword ptr [ebp-44h],eax  }

由于C#代码运行在.net运行时环境上(类似于jvm虚拟机环境),所以无法直接查看进程的实际内存情况。可以看到结构体对象分配在栈上,并且可以得出dword ptr [ebp-3Ch]dword ptr [ebp-40h]均为指针,其中8B5623Ch为字符串常量的地址,而类对象则分配在堆上,dword ptr [ebp-44h]为类对象的地址。

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

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

相关文章

乐理 -07 五线谱

基本构造五线谱 #五线#拍号 4/4 2/2 的特殊写法#音符 表示白键 黑键通过# b 等升降符号表示美观写法 高于三线后 符身往下#符杠 一个拍子合成符杠#附点#休止符全休止符 四线下的实心正方形; 表示4拍休止;或表示整个…

CentOS 7.6 环境下基于 Docker 部署 PaddleOCR 源码的实践指南

本文系统梳理了在 CentOS 7.6 操作系统环境中,通过 Docker 容器化方案部署 PaddleOCR 源码的全过程,涵盖环境准备、容器配置、源码部署、镜像构建及功能验证等核心环节,为工程实践提供详细操作指引。 系统环境初始化…

罗马机场 落地过关 取行李 坐私家车接机攻略

https://www.xiaohongshu.com/explore/6819052a0000000023012917?xsec_token=AB1ho3AaTQW8eMq5MSaJ6TD9Osf2aV5bhuplLUYINLUqY=&xsec_source=pc_collect下飞机后往前走有左右两个方向,我看行李传送带的标志在左边…

LGP10838 [FLA R1] 庭中有奇树 学习笔记

LGP10838 [FLA R1] 庭中有奇树 学习笔记 \(\texttt{Luogu Link}\) 前言 时隔一年。 题意简述 给定一个有边权的无根树,大小为 \(n\)。 小 \(\texttt{G}\) 要从 \(s\) 走到 \(t\),但是他有一次开挂机会,允许以 \(k\)…

网课三

网课三4-Melplotlib 导入相关包:import matplotlib.pyplot as plt 线图:plot():变化趋势 散点图:scatter():数据的相关性 条形图:bar():数据大小和变化趋势 饼图:pie():部分在总体的占百分比 直方图和密度图:hist(…

解决Pregenerating ConTeXt MarkIV format. This may take some time...卡死问题

1、情况 使用apt安装某个软件包在解压时导致卡死,一开始以为多等一会就好了,结果等了好久还是不行,查看资源占用发现cpu占用率很低、磁盘IO也没有、网络也没动静,感觉就是卡死了2、解决方法 上网一查,发现好多人也…

日期相关函数、方法

2025.10.15 1.select * from BORROW where datediff(dd,RDATE,getdate())=0DATEDIFF(datepart, startdate, enddate) 函数返回两个日期之间的时间。 若只需要比较日期,要用datediff检查日期(dd)差,为0 则为当天。…

“[GESP202509 五级] 有趣的数字和”分块做法

这个题看到第一眼不是暴力数位 dp 创过去吗? 换以前,我虽然忘了数位 dp ,但是可能接着这个机会重新学一遍数位 dp 。 但是最近工作任务和学校任务都很重,根本不想重新学一遍数位 DP 。 反而让我发现了一个更通用更…

精确率

2025.10.15 1.精确率是指正确预测的正样本数与所有预测为正样本的比率,反映了模型预测为正样本的准确性

FBAM 论文浅析

这篇论文对当前以Transformer为主流的大模型基础架构提出了深刻的反思与挑战。它论证了纯粹并行化的模型在理论上存在表达能力的上限,并提出了一种融合并行与递归优势的新架构——帧动作模型(Frame-based Action Mod…

2025年上海律师服务最新权威推荐榜:经侦律师,民事纠纷律师,刑事律师,经济律师,婚姻律师,法务律师,负债律师事务所专业实力与口碑深度解析

2025年上海律师服务最新权威推荐榜:经侦律师,民事纠纷律师,刑事律师,经济律师,婚姻律师,法务律师,负债律师事务所专业实力与口碑深度解析在当今复杂多变的法律环境中,上海作为中国的经济与金融中心,对专业法律…

2025年冲压件厂家最新权威推荐榜:新能源/光伏/精密/异形/五金/铝/汽配/不锈钢/家具冲压件优质供应商精选

2025年冲压件厂家最新权威推荐榜:新能源/光伏/精密/异形/五金/铝/汽配/不锈钢/家具冲压件优质供应商精选行业背景与发展趋势冲压加工作为现代制造业的基础工艺,在新能源、光伏、汽车、家具等领域的应用日益广泛。随着…

前端知识图谱

一、JavaScript基础 变量和类型 ● 1.JavaScript规定了几种语言类型 ● 2.JavaScript对象的底层数据结构是什么 ● 3.Symbol类型在实际开发中的应用、可手动实现一个简单的Symbol ● 4.JavaScript中的变量在内存中的具…

软考二

软考二Posted on 2025-10-15 00:41 心默默言 阅读(0) 评论(0) 收藏 举报1. 基本概念与算法1.1 数据元素与数据项1.2 数据结构1.3 算法

UVa(紫书)做题记录

第八章:高效算法设计 UVA11093 Just Finish it up 最直接的办法:选取正收益的点开始,O(n) judge。但有个必须注意到的性质,即如果一个起点不合法,那么刚才扫过的所有点不不合法。于是时间复杂度就降下来了。明明就…

MyBatis 延迟加载使用及原理 - Higurashi

一、延迟加载是什么? 延迟加载(Lazy Loading)又称“惰性加载”,指的是:当查询一个对象时,不立即加载它的关联对象(如一对多、多对一关系),而是在第一次真正使用该关联对象时才去执行 SQL 查询加载它。举个例子…

ADC-过零检测详解

转载自:https://mbb.eet-china.com/tech/t1/177081.html1、反电动势波形的起源 下图展示了内转子磁极的磁感应强度B的分布情况。定义磁感应强度方向向外为正 在0的时候,处于正反方向交界处,磁感应强度为零; 然后开…

今日小雨

喜欢泥土的香气 傍晚的微风 夹杂着清新与沉闷之感 不必要的话不说 有些话没必要说 所做的目的懒得过问 回避过问 大觉一场

内网穿透进阶:让 frpc 只代理「真正在线」的端口

一条脚本搞定「端口探活 + 配置热更新 + 服务保活」,彻底告别手动重启与爆炸日志。一、痛点:静态配置的尴尬本地服务没启动,frpc 仍疯狂重试,日志秒级刷屏;新增/下线服务要手动改 TOML → 重启,极易遗忘;服务异…

规则逻辑与人文逻辑的统一:AI元人文构想的演进之路

规则逻辑与人文逻辑的统一:AI元人文构想的演进之路 在人工智能发展的关键转折点,我们面临着深刻的认知跃迁:规则逻辑与人文逻辑并非对立的两极,而是智能进化道路上相互依存、彼此成就的必然维度。AI元人文构想以其…