当前位置: 首页 > news >正文

长春学校网站建设方案咨询wordpress背景动画

长春学校网站建设方案咨询,wordpress背景动画,wordpress 知识库模板,零食网站建设前的市场分析sizeof(T)从C的模板代码往C#代码移植的时候发现了一个小问题。在C模板代码中 sizeof(T)是一种有效的写法#xff0c;最终在会编译器展开成sizeof(int),sizeof(float)或者sizeof(myclass),然后在运行时这个代码是有效的#xff0c;能够执行的。于是我们看上去就可以计算在运行… sizeof(T)从C的模板代码往C#代码移植的时候发现了一个小问题。在C模板代码中 sizeof(T)是一种有效的写法最终在会编译器展开成sizeof(int),sizeof(float)或者sizeof(myclass),然后在运行时这个代码是有效的能够执行的。于是我们看上去就可以计算在运行时计算T的大小并分配内存。但是在C#的泛型代码中sizeof(T)无法编译过的因为无法确认T是什么的情况下T的大小是无法计算的于是C#编译器是不认的。按C#提供的规范sizeof只能在不安全的代码中使用操作的参数是非托管类型。# 非托管类型sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal 或 bool任何枚举类型任何指针类型任何用户定义的 struct 类型只包含非托管类型的字段并且在 C# 7.3及更早版本中不是构造类型包含至少一个类型参数的类型那么在C#的泛型类里面该如何进行sizeof(T)操作然后我开始尝试着在.net的开源代码里面寻找答案OK,一下子找到两个Unsafe.SizeOf和Marshal.SizeOfUnsafe.SizeOfUnsafe.SizeOf 属于 CompilerServices继续挖掘代码最后得到了一段IL Code .method public hidebysig static int32 SizeOfT()                            cil managed aggressiveinlining { //.... .maxstack 1 sizeof !!T ret } // end of method Unsafe::SizeOfOK这是 IL语言我们就看自己关心的sizeof #IL Code 说明sizeof 将提供的值类型的大小以字节为单位推送到计算堆栈上。OK,UnsafeSizeOf只有值类型的大小Unsafe.SizeOfmyclass();不管我怎么改变myclass的内容结果都是8所以这个不能随便用只能用在值类型上了。结合C#的文档我蛮怀疑关键字sizeof要么是调用了Unsafe.Sizeof函数要么就是直接转换成了IL Code的sizeof。但没什么依据我没在.net的源代码里找到这一点。Marshal.SizeOf这个属于 System.Runtime.InteropServices是.net 和COM互操作的时候用的。这个函数挖掘代码之后是到了一些cpp代码基本路径是这样的Marshal.SizeOf-SizeOfHelper- MarshalNative::SizeOfClass-GetNativeSize()Marshal.SizeOf-SizeOfHelper是C#代码GetNativeSize()是用C代码实现的两边怎么焊接的我就不管了这个暂时不关心。最后 BOOL GetNativeSize() const { LIMITED_METHOD_CONTRACT; return m_cbNativeSize; }返回了一个m_cbNativeSize;OK,我们实际测试下Marshal.SizeOfmyclass();直接报错了因为不是一个非托管结构没法计算大小。Type ConsoleApp1.Programmyclass cannot be marshaled as an unmanaged structure; no meaningful sizeor offset can be computed.OK稍微调整下代码加一个[StructLayout(LayoutKind.Sequential)]然后输出结果是12刚好是三个int的大小。等下还有第三种办法从 C# 7.3 开始可使用 unmanaged 约束指定类型参数为“非指针、不可为 null 的非托管类型”。从 C# 8.0 开始仅包含非托管类型的字段的构造结构类型也是非托管类型如以下示例所示public struct CoordsT{ public T X; public T Y; } public class UnmanagedTypes { public static void Main() { DisplaySizeCoordsint(); DisplaySizeCoordsdouble(); } private unsafe static void DisplaySizeT() where T : unmanaged { Console.WriteLine(${typeof(T)} is unmanaged and its size is {sizeof(T)} bytes); } } // Output: // Coords1[System.Int32] is unmanaged and its size is 8 bytes // Coords1[System.Double] is unmanaged and its size is 16 bytes那么回到我开始的问题如果都是值类型两个都可以用如果是自定义类用Marshal.SizeOf就可以了或者把泛型类写成public struct CoordsT                where T : unmanaged{ public T X; public T Y;}即T只限于非托管类型。结论1.值类型泛型类可以用where T : unmanaged 和sizeof(T)配合使用或者直接使用 Unsafe.Sizeof(T)2.非值类型泛型类可用Marshal.SizeOf(T)本文结束。  ------------------------------写在文后昨天发出之后发现把“泛”字打成范了想想还是删除了今天再发写一篇技术文章从选题写稿编辑检查错别字修改到发稿来来回回几个小时。没有一件事情是容易的。我尽量严肃对待这一切让各位关注者能有所得。谢谢。  ------------------------------写多不如写精      我是丁长老欢迎关注我的技术公众号。个人微信号nine-ding,欢迎加我微信。如需转发文章请加微信号获取转发授权
http://wiki.neutronadmin.com/news/369544/

相关文章:

  • 东莞高端做网站公司信息网站 微站
  • 学院网站建设投标义乌网站设计
  • 网站开发设计概述2022年楼市最新消息
  • 怎么用自己电脑做网站服务器网站续费合同书
  • 网站怎么更改后台登陆密码养殖公司网站
  • 做网站首页有什么域名网站网址
  • 盐城网站建设方案郴州市网站建设科技
  • 微网站用手机可以做吗在自己的电脑建设空间网站
  • 杭州网站程序开发公司如何让百度更新网站收录
  • 郑州网站建设技术外包网站备案核实单
  • 外贸网站设计模板wordpress仿百度文库
  • 权重高的网站是几WordPress用户分类
  • 房地产网站设计个人合法网站怎么做
  • 株洲网站建设报价方案网站 推广 实例
  • 站长工具seo综合查询5g国内十大云服务器商排名
  • 做网赌网站怎么推广拉人wordpress游客怎么发表文章
  • 深圳网站建设方案维护哪个网站推广产品好
  • 随州程力网站建设wordpress 请选择一个文件夹
  • 旅游网站建设的原因怎么做才能让网站人气提升
  • 网站上怎么做通栏的图片中国企业500强江阴有几家
  • 网站建设的颜色值深圳有多少家企业
  • 机电建设工程施工网站厦门seo大佬
  • 南宁网站建设找哪家公司网站开发与建设的原则
  • 创新的响应式网站建设深圳网站建设10强
  • 手机网站建设口碑好竞价排名规则
  • wordpress当下载站免费小程序模板
  • 小程序公众号网站建设酒店网站怎么做
  • 兰州网页制作公司网站网站的开发建设费
  • 十堰网站整站优化公司一个人做网站好做吗
  • 宁波网站推广联系方式网站维护公司