ValueType 堆栈空间耗尽

2024-03-18

我的理解是.Net中的每个新线程都会分配1MB 堆栈空间 https://stackoverflow.com/questions/4088448/the-net-stack-vs-windows-stack。进一步我的理解是,值类型存储在堆栈上而不是堆上......

所以我的问题是这样的;此行为是否意味着任何 ValueType 变量声明都限制为 1MB 的存储空间?您在当前作用域中声明的 ValueType 越多,调用堆栈实际上就越小,这是否意味着在某些时候声明(为了论证)约 260,000 个整数将使用您的所有堆栈空间?


对这类问题最有效的答案通常是去测试。其他人告诉你,你不应该担心这个,他们是kind of正确的。所有链接的文章都很棒并且值得一读。在大多数实际情况下,您不需要接近 1MB 的局部变量。

但是如果你想知道你实际的天气怎么办can1MB 的局部变量值得吗? 正如其他人指出的那样,这是实现细节,结果可能会因平台、编译器版本、供应商等而异。

让我们自己测试一下,看看什么是可能的,什么是不可能的。我在一台带有 VS2010 和 C# 4.0 编译器的 x64 机器上。

这是我的代码:

using System;

namespace SO6301703
{
    struct s64b
    {
        public long f1;
        public long f2;
        public long f3;
        public long f4;
        public long f5;
        public long f6;
        public long f7;
        public long f8;
    }

    struct s256b
    {
        public s64b f1;
        public s64b f2;
        public s64b f3;
        public s64b f4;
    }

    struct s1kb
    {
        public s256b f1;
        public s256b f2;
        public s256b f3;
        public s256b f4;
    }

    struct s8kb
    {
        public s1kb f1;
        public s1kb f2;
        public s1kb f3;
        public s1kb f4;
        public s1kb f5;
        public s1kb f6;
        public s1kb f7;
        public s1kb f8;
    }

    struct s64kb
    {
        public s8kb f1;
        public s8kb f2;
        public s8kb f3;
        public s8kb f4;
        public s8kb f5;
        public s8kb f6;
        public s8kb f7;
        public s8kb f8;

    }

    struct s512kb
    {
        public s64kb f1;
        public s64kb f2;
        public s64kb f3;
        public s64kb f4;
        public s64kb f5;
        public s64kb f6;
        public s64kb f7;
        public s64kb f8;

    }

    struct s1Mb
    {
        public s512kb f1;
        public s512kb f2;

    }

    class Program
    {
        static void Main(string[] args)
        {
            unsafe { Console.WriteLine(sizeof(s1Mb)); }
            s1Mb test;
        }
    }
}

当我编译并运行此代码时,我收到堆栈溢出异常。这意味着至少在some在这种情况下,您确实受到堆栈空间的限制。这确实意味着局部变量越多,留给方法调用、递归等的堆栈就越少。

再次强调:这些考虑几乎不切合实际。如果您分配了 1MB 的局部变量,那么您很可能做错了什么。但如果你想知道的话……现在你知道了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ValueType 堆栈空间耗尽 的相关文章

  • Chrome 内存/垃圾收集问题

    我在使用 Chrome 时遇到内存 垃圾收集问题 我正在开发一个照片上传网站 该网站允许我的客户使用 HTML5 和文件 API 拖放照片进行上传 因此这在 IE 中不起作用 它仅适用于 Chrome 和 FF 我还没有在 Safari O
  • 如何保证对象只有一个线程

    我有以下代码 class Service public void start creates thread which creates window and goes to message loop void stop sends WM C
  • 为什么在创建矩阵类时使用向量不好?

    对于我的矩阵类 我做了 template
  • 在 Xamarin 中隐藏软键盘

    如何隐藏软键盘以便在聚焦时显示Entry在 Xamarin forms 便携式表单项目中 我假设我们必须为此编写特定于平台的渲染器 但以下内容不起作用 我创建自己的条目子类 public class MyExtendedEntry Entr
  • VS 程序在调试模式下崩溃,但在发布模式下不崩溃?

    我正在 VS 2012 中运行以下程序来尝试 Thrust 函数查找 include cuda runtime h include device launch parameters h include
  • 我如何在 C# .NET(win7 手机)中使用“DataContractJsonSerializer”读入“嵌套”Json 文件?

    我有一个问题 如果我的 json 文件看起来像这样 Numbers 45387 Words 空间桶 我可以很好地阅读它 但是如果它看起来像这样 Main Numbers 45387 Words 空间桶 某事 数字 12345 单词 克兰斯基
  • 读取 C# 中的默认应用程序设置

    我的自定义网格控件有许多应用程序设置 在用户范围内 其中大部分是颜色设置 我有一个表单 用户可以在其中自定义这些颜色 并且我想添加一个用于恢复默认颜色设置的按钮 如何读取默认设置 例如 我有一个名为的用户设置CellBackgroundCo
  • 根据 N 个值中最小的一个返回不同的结果

    不确定如何使标题更具描述性 所以我只是从一个例子开始 我使用下面的代码位 它从枚举中选择一个方向 具体取决于四个轴中哪一个与给定方向相比形成最小角度 static Direction VectorToDirection Vector2 di
  • 动态生成的控件 ID 返回为 NULL

    我可以在 Page PreInit 函数中创建动态控件 如何检索控件及其 ID 我的 C 代码用于创建动态控件之一 var btn new WebForms Button btn Text btn ID Addmore btn Click
  • 类的成员复制

    在学习 复制成员 概念时 书中给出了如下说法 此外 如果非静态成员是引用 const 或没有复制赋值的用户定义类型 则无法生成默认赋值 我不太明白这个声明到底想传达什么 或者说这个说法指的是哪一种场景 谢谢 该语句与编译器自动为您编写的类
  • 单例模式和 std::unique_ptr

    std unique ptr唯一地控制它指向的对象 因此不使用引用计数 单例确保利用引用计数只能创建一个对象 那么会std unique ptr与单例执行相同 单例确保只有一个实例属于一种类型 A unique ptr确保只有一个智能指针到
  • 如何在服务器端按钮点击时关闭当前标签页?

    我尝试在确认后关闭当前选项卡 因此我将以下代码放在确认按钮的末尾 但选项卡没有关闭 string jScript ClientScript RegisterClientScriptBlock this GetType keyClientBl
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • 在 EnvDTE 中调试时捕获 VS 局部变量

    是否可以使用 EnvDTE 进行 vsix Visual Studio 扩展来捕获本地和调试窗口使用的调试数据 或者可以通过其他方法吗 我想创建一个自定义的本地窗口 我们可以修改它以根据需要显示一些较重的内容 而无需为高级用户牺牲原始的本地
  • 我可以让 ungetc 取消阻止阻塞的 fgetc 调用吗?

    我想在收到 SIGUSR1 后使用 ungetc 将 A 字符重新填充到标准输入中 想象一下我有充分的理由这样做 调用 foo 时 stdin 中的阻塞读取不会被收到信号时的 ungetc 调用中断 虽然我没想到它会按原样工作 但我想知道是
  • 新任务中使用的依赖注入服务

    我在需要时使用依赖项注入来访问我的服务 但我现在想要创建一个并发任务 但这会由于依赖项注入对象及其生命周期而导致问题 我读过这篇文章 标题 防止多线程 Link http mehdi me ambient dbcontext in ef6
  • 了解使用 Windows 本机 WPF 客户端进行 ADFS 登录

    我已经阅读了大量有关 ADFS 与 NodeJS Angular 或其他前端 Web 框架集成以及一般流程如何工作的文献 并通过 Auth0 Angular 起始代码构建了概念证明 但我不明白如何这可以与本机 WPF Windows 应用程
  • 更改 Windows Phone 系统托盘颜色

    有没有办法将 Windows Phone 上的系统托盘颜色从黑色更改为白色 我的应用程序有白色背景 所以我希望系统托盘也是白色的 您可以在页面 XAML 中执行此操作
  • 矩阵到数组 C#

    这将是转换方阵的最有效方法 例如 1 2 3 4 5 6 7 8 9 into 1 2 3 4 5 6 7 8 9 in c 我在做 int array2D new int 1 2 3 4 5 6 7 8 9 int array1D new

随机推荐

  • Lucene 中的关键字(OR、AND)搜索

    我在我的门户 基于 J2EE 中使用 Lucene 来提供索引和搜索服务 问题出在Lucene的关键字上 当您在搜索查询中使用其中之一时 您会收到错误消息 例如 searchTerms ik OR jij 这工作正常 因为它会搜索 ik o
  • 从 JSON 中插入 HTML 选择标签选项

    所以 事情是这样的 我有一个 JSON 对象保存在我的 web 应用程序的 localStorage 中 此 JSON 被保存为字符串 其中JSON stringify 在我的函数之一内 在页面加载上 localStorage setIte
  • socket.io的emit函数中允许使用数组吗?

    是否可以发送对象数组socket io发出函数 例如 io emit message data 123 data 456 Yes it is 您可以发送几乎任何类型 并且可以将任何类型嵌套在另一种类型中 Strings Numbers 12
  • 为什么匿名类型实例不能接受实体框架查询返回的空值?

    当我尝试运行以下实体框架查询时 var l from s in db Samples let action db Actions Where x gt s SampleID x SampleID x ActionTypeID 1 First
  • 如何存储/计算单个簇大小并在 NetLogo 中绘制它们

    我有一个生成黄色斑块簇的模型 我有兴趣查看簇大小的频率分布 为此 我从 NetLogo 代码库中的 补丁集群示例 中选择了代码 它似乎在查找簇方面起作用 参见下面的照片 尽管我希望它不计算簇中的绿色斑块 但我不知道如何获取大小 或斑块计数
  • 关于 printf 语句的混淆

    所以我正在运行这段代码 include
  • Android:使用 Gradle 构建,使用 Maven 签名

    我的 Android 构建在持续集成中运行良好 但 androidSigning 除外 Gradle 可以允许开发人员清晰地捕获密钥库路径和密码 这并不令人满意 1 你有解决方法吗 比如密码加密 2 我现在的想法是使用 Gradle 进行构
  • 自动递增第二列[重复]

    这个问题在这里已经有答案了 我有一个有 2 列的表 ID 列自动递增 我正在尝试自动增加与 ID 相同的用户列id列 但带有 user 前缀 例如 user100 其中 ID 也是 100 基本上就像 stackoverflow 上所做的那
  • 具有拉伸对齐功能的 Flexbox 容器中垂直居中的 div

    我需要将一个 div 放在 Flex 容器中 并保持该 div 的整个容器的高度 显然 我有align items stretch用于保持高度或align items center用于定心块 Flexbox 模型将 div 居中并保持父容器
  • 在 React 中切换类

    我正在将 React 用于一个有菜单按钮的项目 a href i i a 还有一个 Sidenav 组件 例如
  • 2 个纬度/经度点(坐标)列表之间的地理/地理空间距离

    我有 2 个列表 list1 list2 以及各个地点的纬度 经度 一份清单 list2 的地点名称list1不具有 我也想要 list1 中每个点的近似位置 所以我想指出一点list1 尝试寻找最近的点list2并采取该地点 我对其中的每
  • 将 .class 转换为 .java

    我有一些 class 文件需要转换为 java 所以我这样做了 javap c ClassName class 我一直有同样的错误 ERROR Could not find ClassName class 你们知道可能是什么原因吗 我做了
  • GPUImage iOS 中未显示文本叠加

    我正在尝试在视频上叠加一些文本 但到目前为止还没有取得任何成功 videoCamera GPUImageStillCamera alloc initWithSessionPreset AVCaptureSessionPreset640x48
  • 如何解决一般错误:2006 MySQL 服务器已消失

    我正在执行一项操作 将数百条记录插入 MySQL 数据库 插入 176 条记录后 我收到此错误 PDOException SQLSTATE HY000 一般错误 2006 MySQL 服务器已消失 我有什么办法可以解决这个问题吗 该过程是使
  • 如何在Java中对ArrayList进行排序[重复]

    这个问题在这里已经有答案了 我有一个名为 水果 的课程 我正在创建此类的列表 并将每种水果添加到列表中 我想根据水果名称的顺序对这个列表进行排序 public class Fruit private String fruitName pri
  • 在模型中的belongs_to中使用委托时出现“未初始化常量”错误

    我正在使用三个表的模型实现一个视图 其中一个是连接表 以下是表格 Recipe class Recipe lt ActiveRecord Base validates name presence gt true validates dire
  • 如何正确重复使用卷曲手柄

    我想正确地重用卷曲句柄 这样它就不会给我错误并正常运行 假设我有这段代码 CURL curl curl global init CURL GLOBAL ALL curl curl easy init curl easy setopt cur
  • 标准环境下的 GCP:MySQL 数据库连接被拒绝

    我的目标是让一个可用的 Python 2 7 项目 MySQL MS Word 文件 在 GCP 上工作 我意识到我需要 App Engine 应用程序将在其中运行 缩放等 Cloud SQL working as MySQL db For
  • 如何在使用继承时获取目标 C 中调用者的类名称?

    我有一个名为 BaseClass 的基类 许多类派生自基类 即子类 1 子类 2 和子类 3 interface BaseClass NSObject void configure end implementation void confi
  • ValueType 堆栈空间耗尽

    我的理解是 Net中的每个新线程都会分配1MB 堆栈空间 https stackoverflow com questions 4088448 the net stack vs windows stack 进一步我的理解是 值类型存储在堆栈上