c# - 我刚刚浏览了 Erik Brown 撰写的一篇关于“在您的托管代码中重新发现失落的内存优化艺术”的文章
问题描述
谁能解释一下这个!! 首先Demo导致消耗12个字节,怎么消耗12个,什么时候应该总共8个字节(char = 2Bytes, int = 4 Bytes, char = 2Bytes)
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Demo d1 = new Demo();
Demo2 d2 = new Demo2();
var DemoSize = System.Runtime.InteropServices.Marshal.SizeOf(d1);
var Demo2Size = System.Runtime.InteropServices.Marshal.SizeOf(d2);
}
}
public struct Demo
{
char c1;
int i;
char c2;
}
public struct Demo2
{
int i;
char c1;
char c2;
}
}
其次Demo2 导致消耗 8 个字节,类型的排序如何导致内存优化为 8 个字节,幕后发生了什么,有人可以指导我找到一篇文章或链接,这会更清楚地说明这一点。
最后如何计算一个类的特定实例在堆上消耗的内存?
解决方案
推荐阅读
- sql - 在访问数据库中运行多连接有什么问题吗
- c++ - 为什么这个case语句需要一个“if else”而不仅仅是一个“if”?
- javascript - 在 html 源代码中暴露输入标签是不是很糟糕?
- python - 检查数组的数组元素是否存在于python中的另一个数组中
- pthreads - 无法在 Firefox 中运行简单的 Emscripten 线程示例
- windows - 本地 Kyma 重启问题
- javascript - 使用道具更改禁用属性时的无限循环。(VueJs)
- python - 我想在值错误的地方打印 Insufficient data 并继续 for 循环?如何做呢?
- c# - C# 构造函数如何为只读属性赋值?
- amazon-athena - pyathena 或 pyathenajdbc 无法使用 `schema_name` 连接其他目录没有得到尊重