C#sizeof使用的问题

class Program
{
static void Main(string[] args)
{
string i = "kl;fjgkfgjklfdgj";
unsafe
{
Console.WriteLine(sizeof(i));
}
Console.ReadKey();
}
} 求修改!!!!!!!!!!!!!!!!!

问题一、下表显示了表示某些基元类型大小的常量值。

表达式
结果

sizeof(sbyte)
1

sizeof(byte)
1

sizeof(short)
2

sizeof(ushort)
2

sizeof(int)
4

sizeof(uint)
4

sizeof(long)
8

sizeof(ulong)
8

sizeof(char)
2 (Unicode)

sizeof(float)
4

sizeof(double)
8

sizeof(bool)
1

对于所有其他类型(包括 struct),sizeof 运算符只能在不安全代码块中使用。虽然可以使用 Marshal.SizeOf 方法,但该方法返回的值和 sizeof 返回的值并不总是相同的。Marshal.SizeOf 在已封送处理类型后返回大小,而 sizeof 返回公共语言运行时分配的大小(包括任何空白)。

c sharp 中用的是unicode编码,所以一个char占用两个字节(比如表示一个汉字,需要两个字节)。而在非托管的语言中,字符编码都是8位(比如美国国家标准协会的编码ansi).。

问题二、
要从C语言谈起。

C语言里面struct的空间大小有个对齐原则,以占据空间最大的那个类型的大小的倍数对齐,也就是在这里,int a占了4字节,那么最终struct必须占据4的
最小倍数,此处正常算出来是10,但是10不是4的倍数,必须补足到12。

C#也是一样的道理。这是一种优化机制或者说一种规定罢了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-27
首先,sizeof 运算符只能对数据类型名进行运算。。
比如 sizeof(int) sizeof(bool)。。
另外,就算使用 sizeof(string) 也是不行的,因为 string 并没有预定义的大小,而不像 bool 型变量固定占 1 字节。。
要获取 string 的长度可以用 Length 属性。。
string i = "kl;fjgkfgjklfdgj";
int a = i.Length;本回答被网友采纳

C#sizeof使用的问题
sizeof(bool)1 对于所有其他类型(包括 struct),sizeof 运算符只能在不安全代码块中使用。虽然可以使用 Marshal.SizeOf 方法,但该方法返回的值和 sizeof 返回的值并不总是相同的。Marshal.SizeOf 在已封送处理类型后返回大小,而 sizeof 返回公共语言运行时分配的大小(包括任何空白)。c sharp 中...

c#语言中结构体如何定义结构体数组?新手求教!
问题1:开辟sizeof(StructStudent)*5个内存空间给数组stsz,并在for循环中使用无参构造方法初始化数组中的所有成员。问题2:如果不执行循环进行初始化,无任何影响,可正常使用。结构在编译时就已经初始化,所有的成员会用默认值进行初始化,而你问题1中是在运行时初始化的。问题3:如果要保存N个结构体...

C#中如何获取对象实例大小?
1.使用sizeof运算符。但sizeof只有对int,byte等预定义值类型有效。2.使用System.Runtime.InteropServices.Marshal.SizeOf静态方法。此方法对任何值类型的实例有效。除此之外,引用类型的内存是分配在堆上面的,不管是C,C++还是C#,好像都只能在堆上面实例化对象,删除对象。尤其是C#,连实例化\/删除对象都有人代劳了。如...

C++ sizeof 相当于C#的什么方法
sizeof是计算大小的,和内存相关,但C#的安全代码是要运行在.net上的,是托管的,不用自己去管理内存,所以根本不需要使用sizeof。至于非安全代码怎么使用,搜索C# unsafe

c#处理粘包问题, 懂的进!
解决办法一般都是使用包头+数据的形式,包头包含数据的长度信息,一般可以用个int,固定长度为4包头=数据长度首先把包头发送过去,在发送数据。由于包头的长度是固定的(sizeof(int)),所以接收端,只要先接收4个字节的包头,再接收包头里长度的数据包!重复这样的操作,可以解决分包和粘包的问题 ...

Marshal.SizeOf和sizeof的区别
sizeof在非Unsafe环境下只能用于预定义的一系列类型,如Int,Short等等。而在Unsafe环境下,sizeof可以被用于值类型,但是值类型中不可以有引用类型,否则C#编译器会报错:error CS0208: Cannot take the address of, get the size of, or declare a pointer to a managed type ('SizeOf.Program.My...

求一个C#中使用高性能数组(使用指针)的实际应用
double* pDoubles = stackalloc double [size];从这些代码段中可以看出,stackalloc的语法有点不寻常。它的后面紧跟的是要存储的数据类型名(该数据类型必须是一个值类型),其后是把需要的变量个数放在方括号中。分配的字节数是变量个数乘以sizeof(数据类型)。在这里,使用方括号表示这是一个数组。如果...

c语言怎么看字符串占多少字节
在C语言中,可以使用sizeof()函数来确定字符串所占的字节数。在C语言中,字符串被表示为字符数组,每个字符占用一个字节。字符串的结尾以空字符'\\0'标识,该字符也占用一个字节。因此,一个包含n个字符的字符串将占用n+1个字节的内存空间。sizeof()函数是C语言中的一个内置函数,用于计算变量、...

c语言问题!关于自加自减和运算方向 i = 1; i = (++i) + (++i) ; 结...
++i 是先将i 增1 然后再引用到表达式中进行运算,自增自减 与“!、~、+、-、*、&、sizeof、(类型名)”运算符同级,且只比“()、[]、->、.”运算符的运算级别低。这里的+、-是正负号运算符 i = (++i) + (++i) 等同于 i=1 i=i+1 ; i=2 ; i=i+1;i=3 i=3+...

双引号占几个字节
问题一:c语言中双引号所占字节 5分 #include int main(int argc,char **argv){ char c=''; printf(%d\\n,sizeof(c)); return 0;}可以看出占用的是一个sizeof(char)也就是1个字节 问题二:问:引号内的"中国2015年"占几个字节(Byte) 都说了一个字符两个字节,楼主你String转换的是...

相似回答