在C#中,结构(Struct)为什么被配置在stack中,而类会配置在heap中?简述stack和heap的区别与联系? 10
4个回答
展开全部
(VS.80).aspx
使用结构(C# 编程指南)
struct 类型适于表示 Point、Rectangle 和 Color 等轻量对象。尽管可以将一个点表示为类,但在某些情况下,使用结构更有效。例如,如果声明一个 1000 个 Point 对象组成的数组,为了引用每个对象,则需分配更多内存;这种情况下,使用结构可以节约资源。由于 .NET Framework 包含名为 Point 的对象,因此我们转而调用结构“CoOrds”。
public struct CoOrds
{
public int x, y;
public CoOrds(int p1, int p2)
{
x = p1;
y = p2;
}
}
声明结构的默认(无参数)构造函数是错误的。总是提供默认构造函数以将结构成员初始化为它们的默认值。在结构中初始化实例字段也是错误的。
如果使用 new 运算符创建结构对象,则会创建该结构对象,并调用适当的构造函数。与类不同,结构的实例化可以不使用 new 运算符。如果不使用 new,则在初始化所有字段之前,字段都保持未赋值状态且对象不可用。
对于结构,不像类那样存在继承。一个结构不能从另一个结构或类继承,而且不能作为一个类的基。但是,结构从基类 Object 继承。结构可实现接口,其方式同类完全一样。
与 C++ 不同,无法使用 struct 关键字声明类。在 C# 中,类与结构在语义上是不同的。结构是值类型,而类是引用类型。有关更多信息,请参见值类型。
除非需要引用类型语义,否则系统将较小的类作为结构处理效率会更高。
使用结构(C# 编程指南)
struct 类型适于表示 Point、Rectangle 和 Color 等轻量对象。尽管可以将一个点表示为类,但在某些情况下,使用结构更有效。例如,如果声明一个 1000 个 Point 对象组成的数组,为了引用每个对象,则需分配更多内存;这种情况下,使用结构可以节约资源。由于 .NET Framework 包含名为 Point 的对象,因此我们转而调用结构“CoOrds”。
public struct CoOrds
{
public int x, y;
public CoOrds(int p1, int p2)
{
x = p1;
y = p2;
}
}
声明结构的默认(无参数)构造函数是错误的。总是提供默认构造函数以将结构成员初始化为它们的默认值。在结构中初始化实例字段也是错误的。
如果使用 new 运算符创建结构对象,则会创建该结构对象,并调用适当的构造函数。与类不同,结构的实例化可以不使用 new 运算符。如果不使用 new,则在初始化所有字段之前,字段都保持未赋值状态且对象不可用。
对于结构,不像类那样存在继承。一个结构不能从另一个结构或类继承,而且不能作为一个类的基。但是,结构从基类 Object 继承。结构可实现接口,其方式同类完全一样。
与 C++ 不同,无法使用 struct 关键字声明类。在 C# 中,类与结构在语义上是不同的。结构是值类型,而类是引用类型。有关更多信息,请参见值类型。
除非需要引用类型语义,否则系统将较小的类作为结构处理效率会更高。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
并不是说结构就一定在栈中,类就一定在堆中,关键是看分配方式:
简单的说:
局部变量由系统分配,在栈中,如:
void fun()
{
struct t;
}
但是也可以显示的将其分配在堆中,此时可以使用malloc和HeapAlloc,如:
void fun()
{
struct *t = (struct *)malloc(sizeof(struct));
}
简单的说:
局部变量由系统分配,在栈中,如:
void fun()
{
struct t;
}
但是也可以显示的将其分配在堆中,此时可以使用malloc和HeapAlloc,如:
void fun()
{
struct *t = (struct *)malloc(sizeof(struct));
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结构是值类型
栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小
栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
mark。
等大神解答。
其实这些分配规则都是人定的,而每个人的想法不同所以理解不同,我就不发表自己的见解了,给楼主一个链接,说类和结构的区别的,如何使用还是见仁见智吧。
http://hi.baidu.com/chenying99/blog/item/e0dc7e438a9d6d199213c639.html
等大神解答。
其实这些分配规则都是人定的,而每个人的想法不同所以理解不同,我就不发表自己的见解了,给楼主一个链接,说类和结构的区别的,如何使用还是见仁见智吧。
http://hi.baidu.com/chenying99/blog/item/e0dc7e438a9d6d199213c639.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询