有没有一种标准的方法来查看您的应用程序有多少堆栈空间以及运行期间堆栈使用的最高水印?
另外在可怕的情况下实际溢出会发生什么?
它会崩溃,触发异常还是发出信号?是否有标准或在所有系统和编译器上有所不同?
我正在寻找专门针对Windows,Linux和Macintosh的.
有时,我遇到了以下面试问题:如何用一个数组实现3个堆栈?当然,任何静态分配都不是解决方案.
我最近看了一下Factor,并且有一种基于堆栈概念的语言的想法非常有趣.(这是我第一次遇到面向堆栈的语言.)但是,我没有看到这种范式的任何实际优势.对我来说,它似乎比它的价值更麻烦.为什么我会使用像Stack或Forth这样的面向堆栈的语言?
我忽略了因素(借口双关语),例如工具和库的可用性.我只询问语言范式本身.
enter和之间的区别是什么?
push ebp
mov ebp, esp
sub esp, imm
Run Code Online (Sandbox Code Playgroud)
说明?是否存在性能差异?如果是这样,哪个更快,为什么编译器总是使用后者呢?
以相若方式将leave和
mov esp, ebp
pop ebp
Run Code Online (Sandbox Code Playgroud)
说明.
为什么以及何时应该使用堆栈或队列数据结构而不是数组/列表?你能否请一个例子说明一个状态,如果你使用堆栈或队列会更好?
我以前编写的软件使用堆栈来检查平衡方程,但现在我被要求递归地编写一个类似的算法来检查正确的嵌套括号和括号.
好例子:()[]()([]()[])
不好的例子:((]([)]
假设我的函数被调用:isBalanced.
每次传递都应该评估一个较小的子串(直到达到2的基本情况)?或者,我应该总是评估完整的字符串并向内移动索引吗?
我正在寻找Java的Collections框架中的LIFO结构(Stack)而没有任何成功.基本上我想要一个非常简单的堆栈; 我完美的选择是Deque,但我是Java 1.5.
我不想在我的结构中添加另一个类,但我想知道是否可能:
Collections框架(1.5)中是否有任何类可以完成这项工作?
如果没有,有没有办法在没有重新实现的情况下在LIFO队列(即堆栈)中转换队列?
如果没有,我应该为此任务扩展哪个接口或类?我想保持Sun公司与Deque的合作是一个良好的开端.
非常感谢.
编辑:我忘了谈论Stack类:当我看到它实现Vector类时,我对这个类有疑问,而Vector类有点过时了,不是吗?
以下代码为我生成堆栈溢出错误
int main(int argc, char* argv[])
{
int sieve[2000000];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?我正在使用Turbo C++,但我想将我的代码保存在C中
编辑:
感谢您的建议.上面的代码只是例如,我实际上在函数中声明了数组而不是在sub main中.此外,我需要将数组初始化为零,所以当我使用Google搜索时,我发现calloc非常适合我的目的.
Malloc/calloc还具有优于堆栈分配的优势,允许我使用变量声明大小.
我正在尝试学习C#如何管理内存.我坚持使用静态元素,我阅读了很多关于这个主题的博客和文章,但我找不到一个相当令人满意的答案.
让我们定义一个代码块来帮助找到答案.
class myClass
{
static string myStr = "String Data";
static int myInt = 12;
}
Run Code Online (Sandbox Code Playgroud)
在你们分享你的答案之前,让我分享一下我对这个主题的了解.随意同意或不同意,并帮助我找到正确的答案.
让我感到困惑的是,我在互联网上找到的关于这个主题的一些答案.
混乱1号:
程序启动时,会将所有相关程序集加载到AppDomain中.加载程序集时,将调用所有静态构造函数,包括静态字段.他们将住在那里,卸载它们的唯一方法是卸载AppDomain.
在上面的行中,明确提到存储在AppDomain上的所有静态元素.那么为什么互联网上的每个人都说"静态"元素存储在堆/堆栈上?
困惑2:
每个静态变量都存储在堆上,无论它是在引用类型还是值类型中声明.
如果每个静态变量都存储在堆上.那么为什么有些人说值类型静态变量存储在堆栈上?
请帮助我连接点以了解C#中静态变量的内存管理.非常感谢你宝贵的时间:)
我知道这听起来像是一个普遍的问题而且我已经看过很多类似的问题(无论是在这里还是在网上),但它们都不是真的像我的困境.
说我有这个代码:
void GetSomeData(char* buffer)
{
// put some data in buffer
}
int main()
{
char buffer[1024];
while(1)
{
GetSomeData(buffer);
// do something with the data
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我在全局声明缓冲区[1024],我会获得任何性能吗?
我通过time命令在unix上运行了一些测试,执行时间之间几乎没有差异.
但我真的不相信......
理论上,这种变化应该有所作为吗?
stack ×10
c ×3
algorithm ×2
c++ ×2
heap ×2
memory ×2
queue ×2
.net ×1
allocation ×1
arrays ×1
assembly ×1
c# ×1
collections ×1
factor-lang ×1
java ×1
overflow ×1
performance ×1
recursion ×1
static ×1