stack相关内容

堆栈上的可变大小数组

据我了解,在 C 和 C++ 中,我们在堆栈上创建其大小在编译时已知的数据结构,并且我们将堆(无 malloc/new-delete)用于大小未知的东西编译时间并在运行时决定.那么,我的 g++ 编译器是否允许我执行类似以下代码片段的操作. int main(void){诠释 n ;cin>>n;//获取数组的大小.int arr[n] ;//创建一个可变大小的数组.....做其他事情...} ..
发布时间:2022-01-22 12:44:04 C/C++开发

推送一个寄存器会清空那个寄存器吗?

我已经阅读了很多有关这方面的书籍和说明,但是从未指定的一件事是,在将寄存器压入堆栈后会发生什么.例如,如果您在汇编中编写“push ECX",ECX 寄存器的内容将被压入堆栈(显然).我不知道的是,一旦你这样做了,ECX 寄存器是保留它在推送之前包含的值,还是在推送之后它自己清空? 解决方案 CPU 几乎总是 copy,而不是 copy + zero-the-src.尽管像 mov 这样的 ..
发布时间:2022-01-22 12:43:50 其他开发

更改函数内部堆栈上的结构

我正在通过 Learn C the Hard Way 工作,目前我被困在 额外学分练习编号 16. 我目前正在尝试调整他们的代码并将结构放在堆栈而不是堆上,但我的代码给了我分段错误,我不确定为什么或如何继续.非常感谢任何建议. #include #include #include 结构人{字符*名称;年龄;整数高度;重量;};voi ..
发布时间:2022-01-22 12:43:28 其他开发

c2955 错误 - 使用类模板需要参数列表

所以,我已经测试了矢量,它似乎运行良好.但是,我正在尝试实现一个基于我的 Vector 类的基本 Stack 类.我在构建时不断遇到这些错误: stack.h(4): error C2955: 'Vector' : 使用类模板需要模板参数列表 后跟: vector.h(11) : 参见“向量"的声明stack.h(13) : 参见类模板实例化'Stack'的参考正在编译 这里是 Ve ..
发布时间:2022-01-22 12:42:32 C/C++开发

在 C++ 中处理巨大的多维数组

我正在用 C++ 设计一个类似于 Minecraft 的游戏,它在内存中保存了大量的地形数据.一般来说,我想将一个数组存储在 [5][4][5][50][50][50] 的内存中.这还不错,因为它相当于大约 100mb 的虚拟内存,因为我的结构只有大约 8 个字节. 但是,我无法找出处理此问题的最佳方法.我确实希望它在虚拟内存中,但显然不在堆栈中.而且我一直在犯一些如何在堆栈上创建这个数组并 ..
发布时间:2022-01-22 12:42:15 C/C++开发

Python中的递归有多安全?

我正在做一项 AI 作业,尽管我的教授提出了建议,但我无意用 lisp 写这个作业.但是,我确实想递归地编写它,以使其简洁明了.这是我的问题: 如果我在大型状态空间上执行搜索,我是否会面临堆栈空间不足的重大风险?Python 堆栈有多深? 解决方案 Python 堆栈有多深? python 中默认的递归限制是 1000 帧.您可以使用 sys.setrecursionlim ..
发布时间:2022-01-22 12:42:08 Python

如何在 java 中找到迷宫的其他解决方案?

我需要编写一个程序,在给定的 txt 文件中获取迷宫并将解决方案路径打印到控制台.我编写了这个程序,如下所示,但我只能找到 1 个解决方案.如果迷宫中有超过 1 个解决方案,我需要找到所有这些.我不知道我应该采取什么方法.请给个思路好吗? 这是我的工作: maze.txt(作为参数发送) 111111111111111111011001100011111111001110111001 ..
发布时间:2022-01-22 12:41:59 Java开发

使用堆栈中缀到后缀

我的讲师给了我一个任务,让我创建一个使用 Stack 将中缀表达式转换为后缀的程序.我已经制作了堆栈类和一些函数来读取中缀表达式. 但是这个名为 inToPos(char string[]) 的函数负责使用堆栈将字符串 inFix 中的 inFix 表达式转换为字符串 postFix 中的后置表达式,它正在创建一个断点.你们能帮帮我,告诉我我做错了什么吗? 这些是我的代码,非常需要你的 ..
发布时间:2022-01-22 12:41:44 其他开发

如何知道堆栈函数消耗了多少?

最近,我在一次采访中遇到了这个问题: 我们如何确定特定函数在堆栈上消耗了多少存储空间? 解决方案 它是完全由实现定义的——标准不会以任何方式对程序可能使用的底层机制强加要求. 在 x86 机器上,一个堆栈帧由返回地址(4/8 字节)、参数和局部变量组成. 参数,例如标量可以通过寄存器传递,所以我们不能确定它们是否有助于占用的存储空间.当地人可能会被填充(而且经常是);我们只能 ..
发布时间:2022-01-22 12:41:34 C/C++开发

堆栈粉碎代码在 Linux 内核 2.6.38.7 上不起作用...请帮助

我一直在阅读“The Shellcoders Handbook"并参考 this 链接来练习堆栈溢出.但似乎 Linux 内核开发人员已经使内核非常安全.这是我的问题. 1) 这段代码 void function(int a, int b, int c) {字符缓冲区1[8];字符缓冲区2[10];诠释* ret;ret = 缓冲区 1 + 6;*ret+=8;}无效的主要(){诠释 x; ..
发布时间:2022-01-22 12:41:22 服务器开发

inspect.currentframe() 在某些实现下可能不起作用?

根据文档: inspect.currentframe() 返回调用者堆栈的框架对象框架. CPython 实现细节:此函数依赖于 Python 堆栈解释器中的框架支持,不保证存在于Python的所有实现.如果在没有的实现中运行Python栈帧支持这个函数返回None. 为什么只有这个函数被标记为“依赖于实现"?如果这个功能不起作用,是不是类似的功能,如inspect.tra ..
发布时间:2022-01-22 12:41:04 Python

gcc,内联汇编 - 缺少 pushad/popad?

有什么方法可以避免将 pushad/poppad 指令体复制粘贴到我的代码中? 因为 gcc (current flags: -Wall -m32) 抱怨 __asm__("pushad;"); 错误:没有这样的指令:`pushad' __asm__("poppad;"); 错误:没有这样的指令:`poppad' 解决方案 GCC 使用 AT/T 汇编语法,而 pushad/ ..
发布时间:2022-01-22 12:40:56 其他开发

错误:双端队列迭代器不可取消引用

我正在尝试创建一个将算术表达式从中缀形式转换为后缀形式的程序.只要我不调用“infixToPostFix"函数,程序就可以正常运行.但是当我尝试运行以下代码时,我得到一个崩溃和错误“deque iterator not dereferenceable".我找不到任何取消引用运算符,所以我不确定出了什么问题: //infixToPostfixTest.cpp#include "令牌.h"#incl ..
发布时间:2022-01-22 12:40:47 C/C++开发

C 程序的堆栈会缩小吗?

我注意到每个正在运行的 C 程序都有一个名为 [stack] 的私有映射,它最初非常小(在我的机器上为 128k),但会增长以容纳任何自动变量(直到堆栈大小限制).我假设这是我的程序的调用堆栈所在的位置. 但是,它似乎永远不会缩小到原来的大小.有什么方法可以在不终止进程的情况下释放内存? C 栈是如何在内部实现的;什么会按需增加 [stack] 映射的大小?一些编译器生成的代码、C 库 ..
发布时间:2022-01-22 12:40:36 其他开发

让调用堆栈向上增长会使缓冲区溢出更安全吗?

每个线程都有自己的堆栈来存储局部变量.但堆栈也用于在调用函数时存储返回地址. 在 x86 汇编中,esp 指向最近分配的堆栈末端.今天,大多数 CPU 的堆栈都是负增长的.此行为通过溢出缓冲区并覆盖保存的返回地址来启用任意代码执行.如果堆栈正向增长,这样的攻击将不可行. 让调用堆栈向上增长是否更安全?为什么 Intel 设计 8086 时堆栈向下增长?他们是否可以在任何后来的 CPU ..
发布时间:2022-01-22 12:40:29 其他开发

使用 std::stack 而不是 deque、vector 或 list 有什么优点和缺点

我正在编写一个非常简单的 std::stack ,使用向量作为其底层容器.我意识到我可以用向量容器的 push_back()、pop_back() 和 back() 替换所有的 push()、pop() 和 top() 函数. 我的问题是:当底层容器的受控使用足够时,为什么还要使用容器适配器?为什么不只使用双端队列、向量或列表?会不会浪费内存或处理时间? 解决方案 当您的代码显示 s ..
发布时间:2022-01-22 12:40:16 C/C++开发

测量 Linux 多线程应用程序的堆栈使用情况

我正在为 Linux 嵌入式平台开发一个多线程应用程序. 目前我正在将每个线程的堆栈大小(通过 pthread_set_attr)设置为一个相当大的默认值.我想将每个线程的值微调为更小的值,以减少我的应用程序的内存使用量.我可以通过反复试验将每个线程的堆栈大小设置为逐渐减小的值,直到程序崩溃,但应用程序使用大约 15 个线程,每个线程具有完全不同的功能/属性,因此这种方法非常耗时. 我 ..
发布时间:2022-01-22 12:40:10 服务器开发