小编dna*_*dna的帖子

为什么结构的sizeof是不安全的

MSDN中明确规定

对于所有其他类型(包括结构),sizeof运算符只能用于不安全的代码块.

C#语言规范是更精确的:

  1. 未指定成员打包到结构中的顺序.
  2. 出于对齐目的,在结构的开头,结构内和结构的末尾可能存在未命名的填充.
  3. 用作填充的位的内容是不确定的.
  4. 当应用于具有结构类型的操作数时,结果是该类型的变量中的总字节数,包括任何填充.

但是CLR如何处理以下结构:

[StructLayout(LayoutKind.Explicit, Size = 1, Pack = 1)]
public struct MyStruct
{
    [FieldOffset(0)] public byte aByte;
}

public struct MyEmptyStruct { }
Run Code Online (Sandbox Code Playgroud)

MyStruct我们明确地强制布局,大小,以及如何通过它打包StructLayout属性.该结构应该在内存中具有1个字节的大小.

另一方面MyEmptyStruct是空的,我们可以假设内存中的大小将是0字节 - 即使这样的结构很可能不会被使用它仍然是一个有趣的案例.

当尝试使用来计算论文结构的大小sizeof(MyStruct)sizeof(MyEmptyStruct)编译器会引发以下错误:

' * '没有预定义的大小,因此sizeof只能在不安全的上下文中使用

我想知道为什么sizeof要考虑在这种情况下使用unsafe.问题不是要求解决方法,也不是要求计算结构大小的正确方法,而是要关注原因.

c# struct sizeof

12
推荐指数
2
解决办法
3486
查看次数

JQuery Ajax + Windows身份验证= 401未经授权

我正在处理与我正在处理的应用程序的Ajax问题.Web应用程序是用ASP.NET 4.5编写的,它更具体地来自Visual Studio 2012中的默认MVC示例应用程序.该应用程序托管在本地IIS服务器(非快速版本)上,并且需要Windows身份验证(当前为NTLM)出于安全原因,客户端模仿.

我这里有两个问题.

  1. 网站在浏览时正确地验证了客户端,但由于某些模糊的原因,每个Ajax调用在401 Unauthorized错误中失败(在使用匿名身份验证时它正在工作,所以我猜这些凭据没有封装在请求中?!).我还没来得及调查他们之间的沟通,但我相信这里的一位大师能够提供帮助.

  2. 最后,Windows身份验证提供程序将移至kerberos.关于这个Ajax问题有什么特别要注意的吗?

如果您需要任何其他信息,请与我们联系.

编辑1

我觉得愚蠢...重启IIS解决问题.有一天,IT很高兴......

感谢大家.

asp.net authentication iis ajax jquery

4
推荐指数
1
解决办法
7619
查看次数

标签 统计

ajax ×1

asp.net ×1

authentication ×1

c# ×1

iis ×1

jquery ×1

sizeof ×1

struct ×1