【问题标题】:How to mimic function space [closed]如何模仿功能空间
【发布时间】:2014-03-18 08:06:29
【问题描述】:

我上周想到了这个想法。我参与创建一个应用程序,该应用程序可以使用给定的正则表达式分析 200GB 的日志文件并将报告制作为 CSV 文件。所以多线程是显而易见的。但即使我们以编程方式使用如下所示的多线程

lock(Object)
{
  //Logic
}//unlock(Object) if you prefer c++

实际上它仍然只有一个内存块。有什么办法可以让我像这样创建很多内存空间,这样我就可以在这些函数空间上操作变量。所有这些功能空间都具有相同的功能。下图可以解释清楚

注意:即使委托和匿名函数也是一个函数/内存块。

EDIT1: 我有兴趣知道“标题”是否可能。我给出这个问题是为了让你了解我是如何得到这个想法的。

EDIT2: 我认为在大多数语言中,任何功能总是只有一个实例。这条定律无处不在,包括穿线。我想要相同功能的许多实例。

【问题讨论】:

  • 这个问题对我来说似乎很不清楚。您是在问如何创建每个线程的变量?
  • 这听起来像是用 1000 条鲨鱼喂一条鱼。
  • 日志文件中的数据是固定大小的吗?还是每条记录的大小都是可变的?
  • @prabhakaran 你明白每次调用函数都会有自己的局部变量副本吗?这意味着如果有 10 个线程执行foo(),每个线程将拥有自己的foo() 局部变量的副本。你能清楚地解释一下拥有两个(或十个)相同的功能会带来什么吗?
  • 关于结束投票(不是我的,顺便说一句):这里有几个人试图弄清楚你在问什么,所以把投票搁置为“不清楚你是什么”问”似乎并没有那么不合适。你必须更好地解释自己。

标签: c# c++ multithreading function


【解决方案1】:

它实际上仍然只有一个内存块。

这个假设是不正确的。调用函数会将该函数的所有局部变量压入线程局部堆栈。

实际上,您得到的结果与您在标题为 What I am Saying 的插图中描述的相似。

来自Wikipedia(强调我的):

本地数据存储
一个子程序经常需要内存空间 存储局部变量的值,即已知的变量 仅在活动子程序中,并且在其后不保留值 返回。为这种用途分配空间通常很方便 只需将堆栈顶部移动足以提供空间。 与堆分配相比,这非常快。 请注意,每个单独的 子程序的激活在堆栈中获得自己的单独空间 当地人

【讨论】:

    猜你喜欢
    • 2015-12-01
    • 1970-01-01
    • 2010-10-09
    • 2010-12-09
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多