stack相关内容

关于 C/C++ 堆栈分配

在学习 C++(和 C)时,我对堆栈分配的工作有一些特别的疑问,但我找不到解决方案: 堆栈分配是否隐式调用 malloc/free 函数?如果不;如何保证栈分配和堆分配不冲突? 如果是的话;C++ 中的堆栈分配是否也隐式调用 new/delete?如果是;为一个类重载 new 运算符会影响它的堆栈分配吗? 它在 VC++ 中产生了令人困惑的结果;但由于 VC++ 并不完全符合标准 ..
发布时间:2022-01-22 12:22:29 C/C++开发

什么是安全的最大堆栈大小或如何衡量堆栈的使用?

我有一个带有多个工作线程的应用程序,每个内核一个.在现代 8 核机器上,我有 8 个这样的线程.我的应用加载了很多插件,它们也有自己的工作线程.因为该应用程序使用大量内存(照片,例如 200 MB),所以我有内存碎片问题.问题是每个线程都分配了 {$MAXSTACKSIZE ...} 的地址空间.它不是使用物理内存,而是使用地址空间.我将 MAXSTACKSIZE 从 1MB 减少到 128KB, ..
发布时间:2022-01-22 12:22:03 其他开发

Linux进程的堆栈大小与pthread、fork和exec有什么关系

我有一个关于 Linux 上进程的堆栈大小的问题.这个堆栈大小是否在链接时确定并在 ELF 文件中编码? 我写了一个程序,通过 打印它的堆栈大小 pthread_attr_getstacksize(&attr, &stacksize); 如果我直接从 shell 运行这个程序,它会给出大约 10MB 的值.但是当我从属于多线程程序的线程中 exec 时,它给出的值约为 2MB. ..
发布时间:2022-01-22 12:21:54 服务器开发

x86 堆栈指针指向哪里?

例如如果我推了 ax 是 [SP] 指向我的 ax 值还是 ax 后面的单词?它也不同于实模式和保护模式吗?我问这个是因为汇编艺术书说明和解释了 sp 指向最后推送的数据,并且在此页面上 OSDev Wiki- 堆栈它在最后一次推送数据后指向空字. 解决方案 维基百科说这里: 堆栈是通过隐式递减(推送)实现的,并且递增(弹出)堆栈指针.在 16 位模式下,此隐式堆栈指针寻址为 SS: ..
发布时间:2022-01-22 12:21:48 其他开发

C++ STL栈问题:栈为空为什么pop()不抛出异常?

如果堆栈为空且没有可弹出的内容,为什么 std::stack::pop() 不抛出异常? (我正在为我自己的代码设计一个专门的堆栈,并且想知道这种方法(需要手动检查堆栈是否为空)与抛出异常之间的权衡. 我的猜测是,尽管 C++ 支持异常处理,但它的运行时开销很小,因此,为了获得最佳性能,决定不在 std::stack::pop 中抛出异常). 解决方案 你是对的.C++ 标准总 ..
发布时间:2022-01-22 12:21:29 C/C++开发

从列表中删除范围(尾部)

是否有一种有效的方法可以从 List 中删除 X 元素的范围(例如尾部),例如LinkedList 在 Java 中? 显然可以一个一个地删除最后一个元素,这应该会导致 O(X) 级别的性能.至少对于 LinkedList 实例,它应该有可能具有 O(1) 性能(通过设置要删除的第一个元素周围的引用并设置头/尾引用).不幸的是,我在 List 或 LinkedList 中没有看到任何方法可以 ..
发布时间:2022-01-22 12:21:19 Java开发

是否可以以编程方式构造 Python 堆栈帧并在代码中的任意点开始执行?

是否可以在 CPython 中以编程方式构造一个堆栈(一个或多个堆栈帧)并在任意代码点开始执行?想象以下场景: 您有一个工作流引擎,其中的工作流可以使用 Python 编写脚本,其中包含一些调用工作流引擎的结构(例如分支、等待/加入). 阻塞调用(例如等待或加入)在具有某种持久后备存储的事件调度引擎中设置侦听器条件. 您有一个工作流脚本,它调用引擎中的等待条件,等待稍后将发出信号 ..
发布时间:2022-01-22 12:20:35 Python

堆、堆栈、文本等不同的段与物理内存有何关系?

当编译 C 程序并创建目标文件 (ELF) 时.目标文件包含不同的部分,例如 bss、数据、文本和其他段.我知道 ELF 的这些部分是虚拟内存地址空间的一部分.我对吗?如果我错了,请纠正我. 另外,编译后的程序会有一个虚拟内存和页表.页表在加载程序时将 ELF 中存在的虚拟内存地址与实际物理内存地址相关联.我的理解正确吗? 我在创建的 ELF 文件中读到,bss 部分只保留未初始化的全 ..
发布时间:2022-01-22 12:20:24 其他开发

如何使用 GDB 检查堆栈帧?

现在我一直在使用 GDB 反汇编二进制文件并检查不同的寄存器等等.是否有一个简单的命令来检查堆栈上的所有内容?这可以仅限于函数中的所有内容吗? 解决方案 对于当前栈帧: 信息框架列出有关框架的一般信息(事物在内存中的起始位置等) info args 列出函数的参数 info locals列出存储在框架中的局部变量 ..
发布时间:2022-01-22 12:20:16 其他开发

为什么从_start返回段错误?

我尝试将代码不在main函数中,而是直接放入_start: 段 .text全局_start_开始:推rbpmov rbp, rsp;... 程序逻辑 ...离开ret 编译: yasm -f elf64 main.sld -o main main.o 运行: ./main分段错误(核心转储) 我看了,离开是 mov esp,ebp流行音乐 但是,为什么弹出堆栈帧的结尾和设置的基帧 ..
发布时间:2022-01-22 12:19:47 其他开发

堆栈溢出视觉 C++,可能是数组大小?

据我所知,这不是无限递归造成的. 程序在较小的数组中正常运行(它是一个音频编辑器).现在我增加了功能以允许更大的数组(最多 5 分钟的音频,26460000 条 16 位数据 ~50mb). 由于增加了数组的大小,我在一个特定函数上收到堆栈溢出错误,它应该通过将数组向后写入新数组来反转输入文件的播放,然后覆盖原始数组.我猜每个数组可能高达 50MB,这可能是问题所在: //初始化临时 ..
发布时间:2022-01-22 12:19:39 C/C++开发

Haskell:将整数推送到堆栈实现时的无限列表

我正在尝试实现一个简单的堆栈,但我很困惑为什么当我将一个整数压入堆栈时会得到一个无限列表. 所有其他功能都按我的预期工作,但我不明白 push 的问题.当我尝试将一个空堆栈分配给已推送如下变量的自身时,它会出错: λ>a = makeStackλ>推 3 个[3]λ>一个[]λ>a = 按 3 aλ>一个[3,3,3,3,3,3,3,3,3,3^C 中断. 类型堆栈 a = [a]mak ..
发布时间:2022-01-22 12:19:29 其他开发

堆栈分配,为什么会有多余的空间?

为了更好地掌握调用约定和堆栈的处理方式,我进行了一些尝试,但我不明白为什么 main 在设置堆栈时分配了三个额外的双字(在 ).它既不与 8 个字节对齐,也不与 16 个字节对齐,所以据我所知,这不是原因.如我所见,main 需要 12 个字节用于 func 和返回值的两个参数. 我错过了什么? 该程序是在 x86 架构上使用“gcc -ggdb"编译的 C 代码. 编 ..
发布时间:2022-01-22 12:19:23 其他开发

试图访问 std::stack 的索引

void PDA::parse(vector words){for(int i=0; i 我收到这些错误 PDA.cpp:25: error: no match for â((PDA*)this)->PDA::stack[j]â 中的“operator[]âPDA.cpp:26: error: no match for 'operator[]' in â((PDA*)this)->PDA:: ..
发布时间:2022-01-22 12:18:46 C/C++开发

如何控制Android回栈

假设我有 A->B->C->D->E 在 android 后台堆栈中.我希望能够回到以下其中一项: A->B->CA->B一个 我怎样才能做到这一点?希望不要强迫点击返回按钮. 解决方案 使用Android官方开发者页面的图片和信息tasks and back stack 你可以看到在所有其他启动 Activity 的方法中,你只能使用 FLAG_ACTIVITY_CLEA ..
发布时间:2022-01-22 12:18:39 移动开发

什么是 PostScript 字典,如何访问它们(通过 Ghostscript)?

我通常将 ghostscript 视为命令行工具;然而,我从未停止对那里存在的大量设置和选项感到惊讶 - 这是因为 ghostscript 是一个成熟的 PostScript 语言解释器(我经常忘记). 例如,在 查询 Ghostscript 以获取输出设备的默认选项/设置(例如“pdfwrite"或“tiffg4");学习如何检索给定输出设备的默认选项.但是,我想知道的是 - 这些选项与所 ..
发布时间:2022-01-22 12:18:32 其他开发

最大线程堆栈大小.NET?

C#.NET 2.0 中线程允许的最大堆栈大小是多少?此外,此值是否取决于 CLR 的版本和/或底层操作系统的位数(32 或 64)?我查看了以下资源 msdn1 和 msdn2 公共线程(ThreadStart 开始,整数 maxStackSize) 我能看到的唯一信息是默认大小为 1 兆字节,在上述方法中,如果 maxStackSize 为“0",则将使用在头文件中为可执行文件指定的默认最 ..
发布时间:2022-01-22 12:18:16 其他开发

在 C# 中检查堆栈大小

有没有办法在 C# 中检查线程堆栈大小? 解决方案 这是非要问,买不起(Raymond Chen先说了.)如果代码依赖于有足够的堆栈空间到它有的程度首先检查一下,可能值得重构它以使用显式 Stack 对象.John 关于使用分析器的评论有其优点. 也就是说,事实证明有一种方法可以估计剩余的堆栈空间.这并不精确,但对于评估您离底部的距离已经足够有用了.以下内容主要基于 Joe D ..
发布时间:2022-01-22 12:18:10 C#/.NET

`try/catch` 是如何工作的

我想了解 try {} catch {} 块和堆栈跟踪的工作原理. 我正在阅读 这篇关于异常处理的好文章模式 并找到以下段落: catch (NoSuchMethodException e) {throw new MyServiceException("废话:" +e.getMessage());} 这会破坏原始异常的堆栈跟踪,并且总是错误的. 在那之后我意识到我并不真的知道 tr ..
发布时间:2022-01-22 12:18:04 Java开发