gpt4 book ai didi

c# - Marshall.SizeOf 报告 C# 中结构数组的意外大小

转载 作者:行者123 更新时间:2023-12-01 18:57:53 25 4
gpt4 key购买 nike

不知道以前是否有人问过同样的问题。当我试图在网上搜索时,我找不到它。请帮我解决这个问题?

   using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
[StructLayout(LayoutKind.Sequential)]
public class Details
{
public uint ID;
public uint state;
public uint country;
public uint place;
}
[StructLayout(LayoutKind.Sequential)]
public class UserDetails
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst=8)]
public Details[] userDetails;
}
static void Main(string[] args)
{

UserDetails u = new UserDetails();
int sizeofDetails = Marshal.SizeOf(u);
}
}
}

当我执行代码时,我期望 sizeofDetails 应该是 128。但我得到的是 64。

数组声明有问题吗?有人可以帮忙吗?

最佳答案

类详细信息更改为结构详细信息(并对UserDetails重复)。经过更改后,输出应为预期的 128。

在原始代码中,Details 是一个 Reference/Class 类型,Details[] 是一个包含 8 个“引用”Detail 实例的数组,而不是一个包含 8 个实例的数组详细结构值。由于每个“引用”需要 8 个字节(这在 64 位平台上有意义),因此 8x8 = 64(这是观察到的输出)。


我有点惊讶的是,即使类一个有效的目标,也没有将 StructLayout 应用于类的警告。也许是 ReSharper 添加的?我相当确定我在某处见过它..

关于c# - Marshall.SizeOf 报告 C# 中结构数组的意外大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25615693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com