我正在看这个关于堆栈和堆的教程: C++什么时候用new运算符,什么时候不该用? 在堆示例中,它使用了new关键字,但他首先将int* ptr1初始化为NULL 。 这重要吗?如果重要,为什么? 或者,它只是在浪费空间吗? 我查看了代码并尝试思考为什么在您可以使用int* ptr1 = new i ...
我正在看这个关于堆栈和堆的教程: C++什么时候用new运算符,什么时候不该用? 在堆示例中,它使用了new关键字,但他首先将int* ptr1初始化为NULL 。 这重要吗?如果重要,为什么? 或者,它只是在浪费空间吗? 我查看了代码并尝试思考为什么在您可以使用int* ptr1 = new i ...
隐式演员表: 显式演员表: 但是,如果直接访问它的属性,双重包装隐式转换是否使其成为显式转换? 如下所示... 没有什么重要的只是好奇因为我记得读过关于隐式转换只存储在一个地方(我忘记了堆栈或堆)但是显式转换将它存储在两个地方占用两倍的 memory 或其他东西所以现在我尽可能避免它们. 没有什么重 ...
以下代码片段中哪一个是最佳实践、最优(CPU 利用率)、安全、可读: 或者 在哪种体系结构中,这些是首选或不鼓励的。 比方说我们g++ -S -fverbose-asm和as -alhnd 。 这有助于汇编代码比较以获得最佳代码选择。 我会尽快添加它的结果。 ...
我有一个小的 C 代码,它通过修改堆栈地址处的数据来演示运行时堆栈功能。 其中的 Output 是:a:20 b:20 显示“fun2”中的“b”使用与“fun”中的“a”相同的堆栈地址。 我也想在 Rust 中测试这个。 最简单的方法是什么? 我试过借用,但编译器说“没有借用的价值”。 ...
我是 c++ 的新人。 我有 2 个代码片段。 第一的 结果是 第二个 integer 具有更大的十六进制值。 第二 结果是 这次第一个更大。 有人可以解释一下它们之间的区别。 谢谢你。 ...
我试图了解这段代码的作用: 据我了解,它会尝试确定“17”是否出现在数据部分中。 鉴于 %rsp 的值一开始是一些十六进制 X,我想知道 %rsp 的值范围是多少(使用 X),但它看起来取决于测试部分。 我们是从 go 从 A 到 B,然后是 E,F,回到 C,最后是 D? 最后会有什么价值? 我 ...
我一直在用汇编编写一些代码,我发现了一个错误,它覆盖了其他 memory 位置并给我一个分段错误,这个问题是使用 rbp 寄存器造成的,但下面的示例使用其他寄存器以便于理解。 我的问题是:利用堆栈向下增加的事实,rbp 指向使用 rax 寄存器推送的数据的序列的第一个字节 (0) 或序列的最后一个 ...
我试图在我的 x64 汇编程序中的堆栈上声明一个“四字”数组。 我知道如何通过在.data段中声明数组来做到这一点,但如果可能的话,我想使数组成为main的本地数组。 我知道我也可以使用malloc和动态 memory 分配来做到这一点,但我首先想看看是否有可能在堆栈上做到这一点。 我的问题是我已 ...
以下代码块通过 lambda 表达式启动线程。 这个 lambda 表达式通过引用捕获局部变量“testVar”。 当线程 function 执行时,局部变量从 scope 中消失,线程 function 将无法访问校正值。 通过将捕获子句中的“&”更改为“=”来简要测试复制捕获。 for ...
将局部变量存储到堆栈 memory 中是否取决于在 function 调用中使用它们的值? 在使用“C”编程语言(更具体地说是使用指针)进行一些简单练习时,我注意到以下关于初始化局部变量的异常(我知道这不是异常,只是我缺乏正确的理解)。 当我定义和初始化几个变量,并尝试打印第一个和最后一个变量的地 ...
我知道 Rust 中的向量分配在堆上,向量的指针、容量和长度存储在堆栈上。 假设我有以下向量: 如果我从这个向量创建一个迭代器: Rust model 这个迭代器在堆与栈上的分配如何? 它和向量一样吗? ...
我一直对“堆栈”的实现位置感到困惑。 我知道进程的典型 memory 布局(至少在类 Unix 系统上是这样),但我一直想知道实际上是什么设置了该布局的结构。 是操作系统吗? 编译器? 如果是,那么我不明白 x86 ISA 怎么会有push指令; 这是否意味着在加载任何操作系统之前必须存在某种堆栈 ...
通常,当我有两个并发运行的线程,并且每个线程调用相同的 function 时,有两个 function 实例并行运行,每个线程的堆栈中都有一个 ZCD69B4957F06CD82917BF3D6198E。 没有比赛条件。 我的问题是,如果我有一个带有 function 指针的全局结构怎么办。 如果我 ...
全局变量可以存储在堆栈的顶部,类似于局部变量,除非程序结束,否则永远不会被删除。 但这需要增加每个全局变量的堆栈指针,即使它们永远不会使用堆栈指针(因为堆栈永远不会在该区域中增长或缩小,它在整个程序运行时是持久的 scope。)是放置这些变量的基本原理而是在不同的部分(必须在 CPU 架构中单独添 ...
这是https://codereview.stackexchange.com/questions/278940/hello-world-in-x64-assembly-for-windows-shadow-space-stack-alignment/的转贴,有人建议我 stackoverflow ...
很抱歉这个问题有点复杂 - 但我找不到更好的方法来问这个问题。 非常感谢所有的帮助! 以下是我为合并两个排序链表而编写的方法 - ( MergeTwoLists(ListNode list1, ListNode list2) )。 以下是整个程序: 现在,这是我的问题 - 上面的方法MergeTw ...
来自 C 和 C++,我最近开始学习 x86-64 汇编,以更好地了解我的程序的工作原理。 我知道 x64 汇编中的约定是在调用 function 之前在堆栈上保留 32 个字节的“影子存储”(通过执行: subq $0x20, %rsp )。 我不确定的是:被调用者是负责再次增加%rsp还是调用 ...
您好,我试图通过对具有 1 000 000 个数字的数组进行排序来测试算法(快速排序),但出现堆栈溢出错误。 我之前发现我应该将数组保存在堆上而不是堆栈上。 所以我这样做了。 而不是这个: 这就是我如何称呼 function 以及它的样子: 但我仍然得到堆栈溢出错误。 有谁知道我该怎么做? ...
我正在制作一个有趣的操作系统,同时学习更多的组装。 我了解了推送和弹出,据我了解,pop 获取堆栈上任何其他值之上的值,因此它会获取最后一个推送的值。 但我想知道,我们真的可以直接在栈底(即第一个压入的)弹出值吗? 喜欢: 而不是C,我想以A为例。 (我在 16 位模式下,汇编器是 NASM,在标 ...
当我使用malloc()在堆上分配内存时,除非我使用calloc()或memset()将其清零,否则该内存中可能会有垃圾。 堆栈的情况是否相同,或者我可以安全地假设我在堆栈上分配的任何内容都不会有垃圾? 另外,这在不同的系统或操作系统上是否有所不同? ...