setjmp相关内容

OCaml 内部结构:异常

我很想知道 OCaml 运行时如何处理异常以使它们变得如此轻量级.他们是使用 setjmp/longjmp 还是在每个函数中返回一个特殊值并传播它? 在我看来 longjmp 会给系统带来一点压力,但只有在引发异常时,同时检查每个函数返回值需要在调用函数后检查每个值,这似乎我会进行很多检查和跳转,似乎它会表现最差. 通过查看 OCaml 如何与 C 交互(http://caml.inr ..
发布时间:2022-01-17 08:46:17 其他开发

C++:使用 longjmp 和 setjmp 安全吗?

对于以下情况,在 linux/gcc 上使用 C++ 中的 longjmp 和 setjmp 是否安全? 异常处理(我没有使用 longjmp/setjmp 实现异常处理.我想知道 longjmp/setjmp 对标准异常处理有什么副作用) *this 指针 信号 智能指针(boost 的共享和侵入式指针) 任何你能想到的. 解决方案 setjmp()/longjmp() 完 ..
发布时间:2021-12-17 17:12:55 服务器开发

Longjmp 没有信号处理程序?

来自问题: 是好的编程习惯吗在 C 中使用 setjmp 和 longjmp? 留下的两条评论说: "你不能在信号处理程序中抛出异常,但你可以做一个longjmp 安全——只要你知道你在做什么.– 迪特里希埃普 8 月 31 日 19:57@Dietrich:+1 对您的评论.这是一个鲜为人知的完全被低估的事实.有很多问题不使用 longjmp 就无法解决(讨厌的竞争条件)信号处 ..
发布时间:2021-12-15 08:12:27 服务器开发

包含 <csetjmp> 时,为什么 std 命名空间中没有 setjmp?

标题说明了一切.包含后,longjmp和jmp_buf都在std命名空间中,但setjmp 不是.我在 MinGW4.5 和 MSVC10 上验证了这一点.在查看 标头后,我无法弄清楚这个选择的原因.我一直假设每个 文件都将 包装在 std 命名空间中. 我错了吗?setjmp 特殊情况背后的基本原理是什么?请赐教! 注意:我知道在 C++ 中滥用 setjmp/l ..
发布时间:2021-08-30 18:58:50 C/C++开发

如何在 Rcpp 中安全地生成 R 警告

我们知道在 Rcpp 中应该避免调用 Rf_error(),因为它涉及堆栈上 C++ 析构函数的 longjmp.这就是为什么我们宁愿在 Rcpp 代码中抛出 C++ 异常(如 throw Rcpp::exception("...") 或通过 stop("...")函数). 然而,R 警告也可能导致调用 Rf_error()(此行为取决于 warn 选项).因此,调用 Rf_warning( ..
发布时间:2021-07-03 18:42:20 其他开发

使用 Sys::SigAction::timeout_call 不安全?

我刚刚阅读了 Leon Timmermans 的文章 关于基于信号的超时你应该知道什么 我想知道它如何/是否适用于 Sys::SigAction::timeout_call(). 1) 首先,似乎 timeout_call() 使用了 longjmp 和不安全信号,因此 CERT 安全编码规则 SIG32-C 适用. 2) 如果被监控超时的代码只包含纯 perl 代码(即不调用 XS ..
发布时间:2021-06-15 20:43:19 其他开发

setjmp和longjmp-通过示例进行理解

我知道setjmp和longjmp的定义.setjmp将环境存储在堆栈上下文中,而另一个还原. 但是我认为我有些地方缺乏理解.有人可以在良好的例子帮助下向我解释我如何保证,如何保存以及如何恢复它吗? 我看到jmp_buf中指向了很多CPU寄存器.但是我如何确保它已恢复? 请帮助我用简洁的例子进行解释.我用谷歌搜索并提到了其他与堆栈溢出有关的问题,但没有一个给出清晰的例子. ..
发布时间:2021-05-29 22:52:37 服务器开发

在没有内置函数或汇编的情况下用C实现setjmp和longjmp(获取错误的返回值)

我正在尝试测试2个类似于setjmp和longjmp的功课的函数-这非常困难,因为我们不允许使用内置函数或程序集asm()来实现longjmp和setjmp功能. (是的,这确实是任务.) 问题:我一直收到错误的返回值.简而言之,当main()调用foo()和foo()调用bar(),而bar()调用longjump()时,bar()不应返回foo(),而应setjmp()返回main,返回 ..
发布时间:2020-05-28 22:34:09 其他开发

为什么对于setjmp / longjmp的volatile工作

在调用longjmp()之后,如果自从调用setjmp()以来它们的值可能发生了更改,则不应访问非volatile限定的本地对象。他们在这种情况下的价值被认为是不确定的,访问它们是未定义的行为。 现在我的问题是为什么波动在这种情况下工作?在那个volatile变量中不会改变仍然会失败longjmp?例如,下面给出的示例中longjmp将如何正确工作?当代码返回到longjmp之后的setjm ..
发布时间:2018-04-20 16:17:14 服务器开发

什么是一些“好”使用longjmp / setjmp进行C错误处理的方法?

我必须为一个项目使用C,我正在考虑使用 longjmp / setjmp 进行错误处理,因为我认为在一个中心处理错误会更容易地方比返回码。如果有这样的一些潜在客户,我将不胜感激。 如果发生任何此类错误,我特别关心资源清理是否正确完成。 另外如何处理导致使用多线程程序的错误? 更好的是有一些已经存在错误/异常处理的C库? 解决方案 看看这个例子/教程: http:// ..
发布时间:2017-08-28 00:24:59 开发方法

如何非 - 在C当地跳跃SETJMP.H工作界定?

的 C参考手册,附录B介绍两个功能的setjmp 和的longjmp 的所谓的非本地的跳跃的。除了基本的理解,即的setjmp 保存状态信息和longjmp恢复状态,我一直没能了解该功能的具体流程和用例。 那么,究竟是什么这个功能做到哪里是它有用吗? 解决方案 对于控制流:的setjmp 返回两次,的longjmp 永不再来。当你调用的setjmp 首次,储存环境,它返回零,当你调用的l ..
发布时间:2016-08-23 11:08:11 C/C++

链接到C时,使用C的setjmp和longjmp使用++库

我想用setjmp和longjmp的在链接到在C语言实现库中的C程序++(但有一个C API)。 C ++的code确实做了动态内存分配和指针获得通过API通过,但只要code的C面管理这些(不透明)正确的对象,不应该有任何梅辛使用起来的时候longjmp的,对吧? 我知道这不是安全使用C ++中code这些功能,但它应该是在链接到C ++ code C code安全吗? 解决方案 这 ..
发布时间:2016-08-23 10:02:59 C/C++开发

我们可以重新此时sigsetjmp返回&QUOT; 0 QUOT;再次(复位此时sigsetjmp)?

我已经写了段故障处理程序,利用此时sigsetjmp和siglongjmp。一旦它进入信号处理程序,使出现故障的指令被跳过我调用siglongjmp。 问题是,我再次希望引起SIGSEGV并转到相同的处理,但现在此时sigsetjmp将返回1。 如何重置此时sigsetjmp? 下面是我的code: 的#include&LT;&stdio.h中GT; #包括LT&;&memory.h GT ..
发布时间:2016-08-21 20:46:53 服务器开发

关于setjmp的/ longjmp的

我研究的的setjmp / longjmp的并发现了的setjmp 保存寄存器,如指令指针,堆栈指针等... 不过我不明白这里要说的是,不能在线程本身的堆栈中的数据调用之间修改为的setjmp 和的longjmp 。在这种情况下,不会的longjmp 无法正常工作。 为了明确这一点,例如,当的longjmp 恢复堆栈指针,说,在现在的堆栈指针指向内存中的数据是不一样的是,当的setjmp 被调 ..
发布时间:2016-08-21 19:53:25 服务器开发

优秀的setjmp / longjmp的教程

您好我想读的setjmp / longjmp的好教程C.它会更好,如果有是其实例是真实的,而不是人为的。 感谢。 解决方案 这不是一个真正的教程本身,而是在的的libpng文档描述了库如何使用了setjmp / longjmp的做错误处理。 ..
发布时间:2016-08-18 22:44:45 C/C++

有哪些&QUOT;好&QUOT;方法使用的longjmp对于C错误处理/ setjmp的?

我必须使用下一个项目,我用的longjmp / setjmp的处理错误的思想,因为我认为这将是更容易在一个中央处理错误地方不是返回codeS。我想AP preciate如果有关于如何做到这一些线索。 我特别关注,如果发生任何此类错误资源清理被正确完成。 另外我该如何处理使用他们,导致多线程程序错误? 更妙的是,有没有已经存在的错误/异常处理一些C库? 解决方案 有一个在这个例子/教程 ..
发布时间:2016-08-18 22:09:01 C/C++