stack相关内容
在学习 C++(和 C)时,我对堆栈分配的工作有一些特别的疑问,但我找不到解决方案: 堆栈分配是否隐式调用 malloc/free 函数?如果不;如何保证栈分配和堆分配不冲突? 如果是的话;C++ 中的堆栈分配是否也隐式调用 new/delete?如果是;为一个类重载 new 运算符会影响它的堆栈分配吗? 它在 VC++ 中产生了令人困惑的结果;但由于 VC++ 并不完全符合标准
..
我有一个带有多个工作线程的应用程序,每个内核一个.在现代 8 核机器上,我有 8 个这样的线程.我的应用加载了很多插件,它们也有自己的工作线程.因为该应用程序使用大量内存(照片,例如 200 MB),所以我有内存碎片问题.问题是每个线程都分配了 {$MAXSTACKSIZE ...} 的地址空间.它不是使用物理内存,而是使用地址空间.我将 MAXSTACKSIZE 从 1MB 减少到 128KB,
..
我有一个关于 Linux 上进程的堆栈大小的问题.这个堆栈大小是否在链接时确定并在 ELF 文件中编码? 我写了一个程序,通过 打印它的堆栈大小 pthread_attr_getstacksize(&attr, &stacksize); 如果我直接从 shell 运行这个程序,它会给出大约 10MB 的值.但是当我从属于多线程程序的线程中 exec 时,它给出的值约为 2MB.
..
例如如果我推了 ax 是 [SP] 指向我的 ax 值还是 ax 后面的单词?它也不同于实模式和保护模式吗?我问这个是因为汇编艺术书说明和解释了 sp 指向最后推送的数据,并且在此页面上 OSDev Wiki- 堆栈它在最后一次推送数据后指向空字. 解决方案 维基百科说这里: 堆栈是通过隐式递减(推送)实现的,并且递增(弹出)堆栈指针.在 16 位模式下,此隐式堆栈指针寻址为 SS:
..
如果堆栈为空且没有可弹出的内容,为什么 std::stack::pop() 不抛出异常? (我正在为我自己的代码设计一个专门的堆栈,并且想知道这种方法(需要手动检查堆栈是否为空)与抛出异常之间的权衡. 我的猜测是,尽管 C++ 支持异常处理,但它的运行时开销很小,因此,为了获得最佳性能,决定不在 std::stack::pop 中抛出异常). 解决方案 你是对的.C++ 标准总
..
是否有一种有效的方法可以从 List 中删除 X 元素的范围(例如尾部),例如LinkedList 在 Java 中? 显然可以一个一个地删除最后一个元素,这应该会导致 O(X) 级别的性能.至少对于 LinkedList 实例,它应该有可能具有 O(1) 性能(通过设置要删除的第一个元素周围的引用并设置头/尾引用).不幸的是,我在 List 或 LinkedList 中没有看到任何方法可以
..
是否可以在 CPython 中以编程方式构造一个堆栈(一个或多个堆栈帧)并在任意代码点开始执行?想象以下场景: 您有一个工作流引擎,其中的工作流可以使用 Python 编写脚本,其中包含一些调用工作流引擎的结构(例如分支、等待/加入). 阻塞调用(例如等待或加入)在具有某种持久后备存储的事件调度引擎中设置侦听器条件. 您有一个工作流脚本,它调用引擎中的等待条件,等待稍后将发出信号
..
当编译 C 程序并创建目标文件 (ELF) 时.目标文件包含不同的部分,例如 bss、数据、文本和其他段.我知道 ELF 的这些部分是虚拟内存地址空间的一部分.我对吗?如果我错了,请纠正我. 另外,编译后的程序会有一个虚拟内存和页表.页表在加载程序时将 ELF 中存在的虚拟内存地址与实际物理内存地址相关联.我的理解正确吗? 我在创建的 ELF 文件中读到,bss 部分只保留未初始化的全
..
现在我一直在使用 GDB 反汇编二进制文件并检查不同的寄存器等等.是否有一个简单的命令来检查堆栈上的所有内容?这可以仅限于函数中的所有内容吗? 解决方案 对于当前栈帧: 信息框架列出有关框架的一般信息(事物在内存中的起始位置等) info args 列出函数的参数 info locals列出存储在框架中的局部变量
..
我尝试将代码不在main函数中,而是直接放入_start: 段 .text全局_start_开始:推rbpmov rbp, rsp;... 程序逻辑 ...离开ret 编译: yasm -f elf64 main.sld -o main main.o 运行: ./main分段错误(核心转储) 我看了,离开是 mov esp,ebp流行音乐 但是,为什么弹出堆栈帧的结尾和设置的基帧
..
据我所知,这不是无限递归造成的. 程序在较小的数组中正常运行(它是一个音频编辑器).现在我增加了功能以允许更大的数组(最多 5 分钟的音频,26460000 条 16 位数据 ~50mb). 由于增加了数组的大小,我在一个特定函数上收到堆栈溢出错误,它应该通过将数组向后写入新数组来反转输入文件的播放,然后覆盖原始数组.我猜每个数组可能高达 50MB,这可能是问题所在: //初始化临时
..
我正在尝试实现一个简单的堆栈,但我很困惑为什么当我将一个整数压入堆栈时会得到一个无限列表. 所有其他功能都按我的预期工作,但我不明白 push 的问题.当我尝试将一个空堆栈分配给已推送如下变量的自身时,它会出错: λ>a = makeStackλ>推 3 个[3]λ>一个[]λ>a = 按 3 aλ>一个[3,3,3,3,3,3,3,3,3,3^C 中断. 类型堆栈 a = [a]mak
..
为了更好地掌握调用约定和堆栈的处理方式,我进行了一些尝试,但我不明白为什么 main 在设置堆栈时分配了三个额外的双字(在 ).它既不与 8 个字节对齐,也不与 16 个字节对齐,所以据我所知,这不是原因.如我所见,main 需要 12 个字节用于 func 和返回值的两个参数. 我错过了什么? 该程序是在 x86 架构上使用“gcc -ggdb"编译的 C 代码. 编
..
void function(int a, int b, int c) {字符缓冲区1[5];字符缓冲区2[10];诠释 *ret;ret = 缓冲区 1 + 12;(*ret) += 8;//为什么是8??}无效的主要(){诠释 x;x = 0;函数(1,2,3);x = 1;printf("%d\n",x);} 上面的demo来自这里: http://insecure.org/stf/s
..
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::
..
假设我有 A->B->C->D->E 在 android 后台堆栈中.我希望能够回到以下其中一项: A->B->CA->B一个 我怎样才能做到这一点?希望不要强迫点击返回按钮. 解决方案 使用Android官方开发者页面的图片和信息tasks and back stack 你可以看到在所有其他启动 Activity 的方法中,你只能使用 FLAG_ACTIVITY_CLEA
..
我通常将 ghostscript 视为命令行工具;然而,我从未停止对那里存在的大量设置和选项感到惊讶 - 这是因为 ghostscript 是一个成熟的 PostScript 语言解释器(我经常忘记). 例如,在 查询 Ghostscript 以获取输出设备的默认选项/设置(例如“pdfwrite"或“tiffg4");学习如何检索给定输出设备的默认选项.但是,我想知道的是 - 这些选项与所
..
C#.NET 2.0 中线程允许的最大堆栈大小是多少?此外,此值是否取决于 CLR 的版本和/或底层操作系统的位数(32 或 64)?我查看了以下资源 msdn1 和 msdn2 公共线程(ThreadStart 开始,整数 maxStackSize) 我能看到的唯一信息是默认大小为 1 兆字节,在上述方法中,如果 maxStackSize 为“0",则将使用在头文件中为可执行文件指定的默认最
..
有没有办法在 C# 中检查线程堆栈大小? 解决方案 这是非要问,买不起(Raymond Chen先说了.)如果代码依赖于有足够的堆栈空间到它有的程度首先检查一下,可能值得重构它以使用显式 Stack 对象.John 关于使用分析器的评论有其优点. 也就是说,事实证明有一种方法可以估计剩余的堆栈空间.这并不精确,但对于评估您离底部的距离已经足够有用了.以下内容主要基于 Joe D
..
我想了解 try {} catch {} 块和堆栈跟踪的工作原理. 我正在阅读 这篇关于异常处理的好文章模式 并找到以下段落: catch (NoSuchMethodException e) {throw new MyServiceException("废话:" +e.getMessage());} 这会破坏原始异常的堆栈跟踪,并且总是错误的. 在那之后我意识到我并不真的知道 tr
..