问题标签 [stack-memory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 无法从堆栈对象中捕获异常
希望你今天过得愉快。
我正在研究一个类来包装 Berkley C Networking API,到目前为止,我只得到了一个 TCP 服务器/客户端。
具有讽刺意味的是,我遇到的问题不在于网络,而在于堆栈和堆。也许我根本不完全理解它,但是当我使用类似的东西时:
ClientSocket *mysock = new ClientSocket();
并且只需使用 -> 运算符调用函数,它就可以正常工作 - 如果发生错误,我的 SocketException 类会被捕获没有问题。
但是,当我使用:
ClientSocket mysock;
并且在使用 . 运算符,它显示:
terminate called after throwing an instance of 'SocketException'
Aborted
只是让我回到终端提示符。
忘了补充,我将调用包装在 try/catch 块中。
我知道第一个示例是使用“new”关键字返回指向堆上新 ClientSocket 实例的指针,第二个示例用于堆栈,但我不知道问题所在。
我在想我错过了一些关于指针/引用/堆栈/堆的东西,但我不知道发生了什么。代码通常运行得很好,但是如果抛出任何异常...... >:(
编辑:在链接页面上,Client.cxx 和 Server.cxx 是示例文件!感谢您指出这一点,埃里克。对此的帮助将不胜感激。该项目的来源位于:
所有文件的链接:http: //furryhead.co.cc/problem.html
(我不能粘贴超过 2 个链接,而且我有 4 个文件,所以必须这样做,直到有人可以将链接合并到我的帖子中)注意:Socket.cxx 相当大,因为它包含 ServerSocket、ClientSocket 和 SocketException 定义。
编译上述所有文件的命令是:
g++ -c Socket.cxx -o Socket.o
g++ -c Server.cxx -o Server.o
g++ -c Client.cxx -o Client.o
g++ Server.o Socket.o -o 服务器
g++ Client.o Socket.o -o 客户端
谢谢!
很少更新,根据 Jon 的建议,我查找了套接字函数的文档,现在它有更好的错误报告——我检查了 'errno' 变量并基于它抛出异常。(那个,而且我没有将它设置为非阻塞......;)) - 只是想更新并表示感谢!:D
c - 存储在全局链表中的本地结构(并在其他函数中访问)在 VC2010 中有效。这是正确的 C99/ANSI 吗?
以下代码工作正常:
该结构是在除 main 之外的函数中本地创建的,但我能够从 localstructtest() 范围之外的链表中检索数据。局部变量是在堆栈上创建的,这个结构也是如此吗?或者它实际上是在堆上创建的并且指针/引用仍然有效?当我测试它时,我预计这会失败。我承认我是一名 C++ 程序员,我可能并不完全理解 C 中没有传递引用的后果。如果可以像这样使用结构数据,那么数据什么时候得到释放?
谢谢!
c - getaddrinfo addrinfo 导致堆栈或堆
至少我有点困惑。getaddrinfo() 调用“更新”指向 addrinfo 结构的指针,当我要在同一范围(该函数)中使用 addrinfo 时,一切都很好,但是如果我将结构复制到另一个结构(通过分配它)会发生什么。
请帮助我了解正在进行的基础知识(不寻求替代方法的建议)。
如果我错了,请纠正我:a) getaddrinfo() 需要一个指向 addrinfo 的 struct-pointer 的指针。b) getaddrinfo 在当前函数范围内创建一个 addrinfo 结构并更新 a) 中所需的指针
现在我真正的问题是:我想将该 addrinfo 存储在其他地方。使用分配给另一个指针不会进行深度复制,并且在函数之后所有指针都变得无效?
最好举一个极其简化的例子:
直接在 getaddrinfo 上使用 &update 似乎不起作用,因为问题仍然存在:原始结构在函数范围结束后被销毁。
任何人都可以在这里给我更多的见解(请解释什么在哪里创建和在哪里销毁,堆栈,堆所有信息都是受欢迎的)
.net - 在 .NET 中初始化字符串和不初始化字符串之间的区别
我想知道在使用 new 关键字初始化字符串以及在没有 new 关键字的情况下为字符串设置值时如何分配内存。
阿比舍克·斯里坎特
.net - 堆栈和堆查看器
是否有适用于 .NET 的免费堆栈和堆查看器,它显示在堆栈和堆上分配了哪些类型。我需要这个来进行我将要进行的培训。
memory - 内存中的堆栈实际上是堆栈吗?
在内存中有一个称为堆栈的部分,它从顶部开始并向下增长到堆。这个堆栈和 LIFO 堆栈是一样的吗?底部的堆是 FIFO 吗?
当您执行“push”和“pop”时,是否会改变内存中的堆栈?
c++ - C++ 堆内存性能提升
我正在编写一个需要大量堆内存的函数。是否可以告诉编译器这些数据将在特定for
循环中被频繁访问,从而提高性能(通过编译选项或类似方法)?
我不能使用堆栈的原因是我需要存储的元素数量很大,如果我尝试这样做会出现分段错误。
现在代码正在运行,但我认为它可能会更快。
更新:我正在做这样的事情
一些细节:
- 我使用了 hash_set,几乎没有改进,除了 hash_set 并非在我拥有的所有机器中都可用以用于模拟目的
- 我尝试使用数组在堆栈上分配 vec 但是,正如我所说,如果我可能会遇到分段错误元素数量太大
例如,如果 node_vec.size() 等于 k,其中 k 大约为几千,我希望 vec 比 node_vec 大 4 或 5 倍。考虑到我必须多次运行它,使用这个数量级的代码似乎很慢。当然,我使用多线程来并行化这些调用,但我不能让函数本身运行得比我现在看到的快得多。
例如,是否有可能在高速缓存内存中分配 vec 以进行快速数据检索,或类似的东西?
.net - 堆栈内存位置
我知道堆内存是内存的一部分。但是堆栈内存也是ram的一部分或堆栈内存是cpu寄存器的一部分。.net4.0 应用程序的堆栈内存的默认大小是多少
assembly - pop or add esp, 4 ? What is the difference?
I saw this question, but I didn't find my answer in it..
So, why would I prefer to use add esp, 4
or add esp, 8
instead of using pop
one or two times? Is there any difference (performance, safety, etc.) at all or it's a matter of personal choice?
performance - 递归和非递归实现之间的速度比较
我有一个复杂的算法,它使用非常深的递归。因为某些特定数据存在堆栈溢出,所以我尝试在不递归的情况下重写它(使用堆上的外部堆栈)。所以我对同一算法进行了两次修改。然后我进行了一些测试,我发现递归实现的时间比另一个快得多。
有人可以向我解释一下吗?讨论这些结果是我最后一个大学项目的一部分(为什么一个实现比另一个快得多)。我认为这是因为堆栈和堆的缓存不同,但我不确定。
非常感谢!
编辑
好的,有代码。该算法是用 C++ 编写的,解决了树同构问题。除了比较两个节点的一种方法之外,这两种实现都是相同的。比较是递归定义的——如果一个节点的一个子节点小于另一个节点的相应子节点,则一个节点小于另一个节点。
递归版本
非递归实现