您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。
- 内容介绍
- 文章标签
- 相关推荐
本文共计875个文字,预计阅读时间需要4分钟。
使用运算符new声明值类型数据时,值类型数据会被存储在栈(stack)中。例如,声明一个`int`类型的数据:
csharpint a;
这里的`a`存储在栈上。但当我们使用`new`关键字:
csharpint b=new int();
此时,虽然`b`仍然存储在栈上,但`new int()`所创建的`int`对象本身存储在堆(heap)上。堆是用于动态分配内存的区域,当使用`new`时,系统会在堆上分配内存并返回一个指向这个内存的指针。所以,`b`变量实际上包含了指向堆上分配的`int`对象的引用。
使用运算符“new”声明值类型据说值类型存储在堆栈中。但是当我们用new声明一个值类型时会发生什么?例如inta;存储在堆栈中,但是intbnewint();b存储在哪里?堆还是叠 使用运算符“new”声明值类型据说值类型存储在堆栈中。 但是当我们用new声明一个值类型时会发生什么? 例如
int a;
存储在堆栈中,但是
int b = new int();
b存储在哪里? 堆还是叠? 这让我很困惑。 它就像一个引用,但它是一个值类型。
据说值类型存储在堆栈中
这经常说,但显然是错误的。 当你创建一个100个整数的数组时,那些内存是存在于堆栈还是堆上?
存储的生命周期与存储类型有关的想法简直是错误的。 正确的说法是, 可以从短期存储中分配具有已知短寿命的值类型的变量,当您这样说时,这听起来非常明显。
确保你对此很清楚: int i;是完全错误的int i; 意思是“在堆栈上分配i”。 它意味着“为我分配存储”; 如果已知存储寿命很短,则可以在短期存储中分配。 否则它将在长期商店中分配。
但是当我们用new声明一个值类型时会发生什么?
您认为“新”会导致从堆中分配新存储。 它不是。 将“new”视为“获取存储然后调用构造函数”的含义。
为类类型获取的存储始终在堆上,因为不知道类数据的生命周期很短。 为值类型获取的存储记录为在堆栈上,然后将值复制到其最终目标,该目标可能位于堆栈或堆上。 但是,如果编译器可以确定这样做是安全的,那么可以复制分配和复制。
以下是一些有用的文章:
blogs.msdn.com/b/ericlippert/archive/2010/09/30/the-truth-about-value-types.aspx
blogs.msdn.com/b/ericlippert/archive/2010/10/11/debunking-another-myth-about-value-types.aspx
堆栈或堆,这是一个实现细节。 你实际上并不能保证即使int只会在堆栈上 运行时可以决定在堆上分配任何值类型,如果它认为它在性能方面会更好。
您可以在Eric Lippert的博客上阅读
上述就是C#学习教程:使用运算符“new”声明值类型分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注编程笔记
本文共计875个文字,预计阅读时间需要4分钟。
使用运算符new声明值类型数据时,值类型数据会被存储在栈(stack)中。例如,声明一个`int`类型的数据:
csharpint a;
这里的`a`存储在栈上。但当我们使用`new`关键字:
csharpint b=new int();
此时,虽然`b`仍然存储在栈上,但`new int()`所创建的`int`对象本身存储在堆(heap)上。堆是用于动态分配内存的区域,当使用`new`时,系统会在堆上分配内存并返回一个指向这个内存的指针。所以,`b`变量实际上包含了指向堆上分配的`int`对象的引用。
使用运算符“new”声明值类型据说值类型存储在堆栈中。但是当我们用new声明一个值类型时会发生什么?例如inta;存储在堆栈中,但是intbnewint();b存储在哪里?堆还是叠 使用运算符“new”声明值类型据说值类型存储在堆栈中。 但是当我们用new声明一个值类型时会发生什么? 例如
int a;
存储在堆栈中,但是
int b = new int();
b存储在哪里? 堆还是叠? 这让我很困惑。 它就像一个引用,但它是一个值类型。
据说值类型存储在堆栈中
这经常说,但显然是错误的。 当你创建一个100个整数的数组时,那些内存是存在于堆栈还是堆上?
存储的生命周期与存储类型有关的想法简直是错误的。 正确的说法是, 可以从短期存储中分配具有已知短寿命的值类型的变量,当您这样说时,这听起来非常明显。
确保你对此很清楚: int i;是完全错误的int i; 意思是“在堆栈上分配i”。 它意味着“为我分配存储”; 如果已知存储寿命很短,则可以在短期存储中分配。 否则它将在长期商店中分配。
但是当我们用new声明一个值类型时会发生什么?
您认为“新”会导致从堆中分配新存储。 它不是。 将“new”视为“获取存储然后调用构造函数”的含义。
为类类型获取的存储始终在堆上,因为不知道类数据的生命周期很短。 为值类型获取的存储记录为在堆栈上,然后将值复制到其最终目标,该目标可能位于堆栈或堆上。 但是,如果编译器可以确定这样做是安全的,那么可以复制分配和复制。
以下是一些有用的文章:
blogs.msdn.com/b/ericlippert/archive/2010/09/30/the-truth-about-value-types.aspx
blogs.msdn.com/b/ericlippert/archive/2010/10/11/debunking-another-myth-about-value-types.aspx
堆栈或堆,这是一个实现细节。 你实际上并不能保证即使int只会在堆栈上 运行时可以决定在堆上分配任何值类型,如果它认为它在性能方面会更好。
您可以在Eric Lippert的博客上阅读
上述就是C#学习教程:使用运算符“new”声明值类型分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注编程笔记

