【问题标题】:How to compare different default stack sizes? [closed]如何比较不同的默认堆栈大小? [关闭]
【发布时间】:2017-07-22 08:19:33
【问题描述】:

我将我的 Linux 机器的默认堆栈大小从 8MB 更改为 2MB,我想比较我通过此更改节省的内存量。如何比较 8mb 堆栈大小和 2 mb 堆栈大小的系统更改效果

【问题讨论】:

  • 这听起来像是一个题外话;特别是基于您在某些答案中的一些 cmets。也许您可以针对 Stack Overflow 稍微改进一下这个问题。需要明确的是,Stack Overflow 是一个解决编程和开发问题的网站。

标签: linux ubuntu memory memory-management


【解决方案1】:

编写一个打印递增数字的非尾递归函数,例如:

void stackOverFlowMe(int i) {
    cout<<i<<"\n";
    stackOverFlowMe(i+1);
}

例如在 C++ 中(您可以使用任何语言),看看它能走多远。大多数程序不需要那么多。

根据您的评论,您可以在 shell 中使用 top 检查所有 Linux 发行版中的内存使用情况。第一行包含全局信息:

top - 11:27:46 up 18 days, 21:08, 13 users,  load average: 0.71, 0.23, 0.16
Tasks: 277 total,   2 running, 274 sleeping,   1 stopped,   0 zombie
%Cpu(s):  1.4 us,  0.4 sy,  0.0 ni, 98.1 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  8105520 total,  1798056 free,  3223720 used,  3083744 buff/cache
KiB Swap:  5192700 total,  5165132 free,    27568 used.  3993932 avail Mem

【讨论】:

  • 我想知道通过执行此更改我节省了多少内存,但是当我比较时,我看到两个系统中的值相同。如果你能给我一些非常棒的信息..谢谢
  • @ABHINAVKUMAR13BIT0087 请参阅编辑以获取您记忆的全局图片。不确定您会受到多大影响,具体取决于您正在运行的内容。
  • 是的,我尝试过 top 、 free 、 vmstat 、 /proc/meminfo ,但我找不到太大的不同。但我会尝试更深入
  • @ABHINAVKUMAR13BIT0087 它真的不应该为你节省那么多,大多数正常的东西不会使用那么多堆栈。
【解决方案2】:

当您的 linux 机器上的程序运行时,它们会作为程序函数定期从堆栈中添加和删除数据。堆栈大小,是指在内存中为堆栈分配了多少空间。如果增加堆栈大小,则允许程序增加可以调用的例程数量。每次调用函数时,都可以将数据添加到堆栈中(堆栈在最后一个例程数据的顶部。)

除非程序非常复杂,或者设计用于特殊目的,否则 8192kb 的堆栈大小通常是可以的。某些程序(例如图形处理程序)需要您增加堆栈的大小才能运行。因为他们可能会在堆栈上存储大量数据。下面是一些用于更改堆栈大小的命令。希望这会有所帮助。

SunOS/Solaris:
==============
    > limit          # shows the current stack size
    > unlimit        # changes the stack size to unlimited
    > setenv STACKSIZE 32768 # limits the stack size to 32M bytes

Linux:
======
    > ulimit -a     # shows the current stack size
    > ulimit -s 32768   # sets the stack size to 32M bytes

【讨论】:

    猜你喜欢
    • 2017-07-14
    • 2014-06-26
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多