C++语言
wuhui_gdnt
这个作者很懒,什么都没留下…
展开
-
C++的词法闭包
C++的词法闭包Thomas M. Breuel[1]翻译:吴晖摘要我们描述C++编程语言的一个允许函数定义嵌套,并提供具有动态生命期的词法闭包(lexical closures)的扩展。对于这个扩展,我们的主要动力是它允许程序员,像成员函数那么简单地,为集合类(collection class)定义迭代器。这样的迭代器接受函数指针或闭包作为参数;提供词法闭包使表达状态(例如,翻译 2012-07-31 11:55:00 · 3383 阅读 · 0 评论 -
C++异常的幕后9:捕捉我们第一个异常
原文地址:https://monoinfinito.wordpress.com/2013/04/02/c-exceptions-under-the-hood-9-catching-our-first-exception/作者:nicolasbrailo在上一章我们添加一个_Unwind_可以调用的personality函数,并分析这个personality函数接受的参数。现在是时候向__...翻译 2019-04-04 15:06:59 · 282 阅读 · 0 评论 -
C++异常的幕后7:好的personality
原文地址:https://monoinfinito.wordpress.com/2013/03/19/c-exceptions-under-the-hood-7-a-nice-personality/作者:nicolasbrailo在我们学习异常的旅程中,目前我们已经了解到如何完成抛出,称为“调用帧信息”的东西辅助称为Unwind的库执行栈回滚,编译器写入称为LSDA的、语言特定数据区,...翻译 2019-03-29 11:12:42 · 507 阅读 · 0 评论 -
C++异常的幕后10:_Unwind_与调用帧信息
原文地址:https://monoinfinito.wordpress.com/2013/04/09/c-exceptions-under-the-hood-10-_unwind_-and-call-frame-info/作者:nicolasbrailo我们让我们的小ABI项目(链接)能够抛出异常了,现在我们着力捕捉它们;上次我们实现了一个能够检测并处理异常的personality函数,不...翻译 2019-04-12 12:10:14 · 1844 阅读 · 0 评论 -
C++异常的幕后8:两阶段处理
原文地址:https://monoinfinito.wordpress.com/2013/03/26/c-exceptions-under-the-hood-8-two-phase-handling/作者:nicolasbrailo上一章以添加一个_Unwind_能够调用的personality函数而结束。它没做什么,但它在那里。我们已经实现的ABI现在可以抛出异常,捕捉也已经完成一半,...翻译 2019-04-03 13:40:20 · 551 阅读 · 0 评论 -
C++异常的幕后11:阅读CFI表
原文地址:https://monoinfinito.wordpress.com/2013/04/11/c-exceptions-under-the-hood-11-reading-a-cfi-table/作者:nicolasbrailo要从我们已经为我们的ABI实现的personality函数里正确处理异常,我们需要阅读LSDA(语言特定数据区)来了解哪个调用帧(即哪个函数)可以处理哪个异...翻译 2019-04-26 11:55:06 · 709 阅读 · 0 评论 -
C++异常的幕后12:C++里的突然反射
原文地址:https://monoinfinito.wordpress.com/2013/04/16/c-exceptions-under-the-hood-12-and-suddenly-reflexion-in-c/作者:nicolasbrailo我们的小ABI项目(链接)能够抛出异常了,现在我们致力于捕捉它们;上次我们实现了一个能够检测及处理异常的personality函数,但它仍然...翻译 2019-05-06 13:31:31 · 255 阅读 · 0 评论 -
C++异常的幕后13:为着陆垫设置上下文
原文地址:https://monoinfinito.wordpress.com/2013/04/25/c-exceptions-under-the-hood-13-setting-the-context-for-a-landing-pad/作者:nicolasbrailo上次我们终于写出了几乎能工作的personality函数。我们可以检测每个有着陆垫可用的栈帧,然后告诉_Unwind_我...翻译 2019-05-17 11:50:07 · 307 阅读 · 0 评论 -
C++异常的幕后14:多个着陆垫与大师的教导
原文地址:https://monoinfinito.wordpress.com/2013/04/23/c-exceptions-under-the-hood-14-multiple-landing-pads-the-teachings-of-the-guru/作者:nicolasbrailo在大量困难的工作后,上次我们最终得到了可工作的personality函数,它无需libstdc++就...翻译 2019-05-24 11:40:38 · 326 阅读 · 0 评论 -
C++异常的幕后15:找到正确的着陆垫
原文地址:https://monoinfinito.wordpress.com/2013/05/02/c-exceptions-under-the-hood-15-finding-the-right-landing-pad/作者:nicolasbrailo这是我在这个博客里所写的最长系列文章中的第15篇;目前我们已经了解到异常如何抛出,并且已经编写了通过某种反射,能够检测catch块(在异...翻译 2019-05-31 12:22:43 · 256 阅读 · 0 评论 -
C++异常的幕后16:在着陆垫里找到正确的捕捉
原文地址:https://monoinfinito.wordpress.com/2013/05/07/c-exceptions-under-the-hood-16-finding-the-right-catch-in-a-landing-pad/作者:nicolasbrailo应我们要求第16章要实现能够处理异常的小ABI;上次我们实现了personality函数,使它能够处理有多个着陆垫...翻译 2019-06-06 11:48:20 · 208 阅读 · 0 评论 -
C++异常的幕后17:异常类型的发射以及读.gcc_except_table
原文地址:https://monoinfinito.wordpress.com/2013/05/14/c-exceptions-under-the-hood-17-reflecting-on-an-exception-type-and-reading-gcc_except_table/作者:nicolasbrailo目前为止我们知道在抛出一个异常时,通过阅读本地储存区,即.gcc_exce...翻译 2019-06-14 11:55:40 · 774 阅读 · 0 评论 -
C++异常的幕后18:获取正确的栈帧
原文地址:https://monoinfinito.wordpress.com/2013/05/16/c-exceptions-under-the-hood-18-getting-the-right-stack-frame/作者:nicolasbrailo我们最新的personality函数知道它是否可以处理一个异常(假设每个try块仅有一条catch语句,并假设没有使用继承),不过要使得...翻译 2019-06-21 11:26:08 · 625 阅读 · 0 评论 -
C++异常的幕后19:在着陆垫里获取正确的捕捉
原文地址:https://monoinfinito.wordpress.com/2013/05/23/c-exceptions-under-the-hood-19-getting-the-right-catch-in-a-landing-pad/作者:nicolasbrailo关于C++异常处理的第19篇文章:我们已经编写了一个personality函数。目前为止,它通过读LSDA,能够在...翻译 2019-06-28 11:46:25 · 219 阅读 · 0 评论 -
C++异常的幕后20:在回滚时运行析构函数
原文地址:https://monoinfinito.wordpress.com/2013/05/28/c-exceptions-under-the-hood-20-running-destructors-while-unwinding/作者:nicolasbrailo上次我们编写的小ABI版本11能够处理相当多处理异常的基本情况:我们有一个(几乎奏效的)能够抛出与捕捉异常的ABI,但它仍然...翻译 2019-07-05 11:23:47 · 241 阅读 · 0 评论 -
C++异常的幕后21:总结与一些最后的思考
原文地址:https://monoinfinito.wordpress.com/2013/06/04/c-exceptions-under-the-hood-21-a-summary-and-some-final-thoughts/作者:nicolasbrailo在撰写了二十余篇关于C++底层异常处理的文章之后,是时候回顾并做出有些最终思考。我们学了什么,异常如何抛出,以及如何捕捉它?...翻译 2019-07-19 11:12:45 · 240 阅读 · 0 评论 -
C++异常的幕后6:gcc_except_table与personality函数
原文地址:https://monoinfinito.wordpress.com/2013/03/12/c-exceptions-under-the-hood-6-gcc_except_table-and-the-personality-function/作者:nicolasbrailo上次我们了解到,就像throw语句被翻译为一对__cxa_allocate_exception/thro...翻译 2019-03-22 11:54:05 · 1797 阅读 · 0 评论 -
C++异常的幕后4:捕捉你抛出的异常
原文地址:https://monoinfinito.wordpress.com/2013/02/26/c-exceptions-under-the-hood-4-catching-what-you-throw/作者:nicolasbrailo在这个关于异常处理的系列里,通过检查编译器与链接器错误,我们已经发现不少异常抛出的秘密,但目前为止我们还看到任何关于异常处理的东西。让我们总结一下学...翻译 2019-03-08 11:26:05 · 375 阅读 · 0 评论 -
C++异常的幕后5:围绕__cxa_begin_catch与__cxa_end_catch的魔术
原文地址:https://monoinfinito.wordpress.com/2013/03/05/c-exceptions-under-the-hood-5-magic-around-__cxa_begin_catch-and-__cxa_end_catch/作者:nicolasbrailo在学习了异常如何抛出后,现在我们正在学习如何捕捉它们的过程中。上次我们在我们的例子里添加了一组...翻译 2019-03-12 14:32:42 · 1032 阅读 · 0 评论 -
位置无关代码
以下内容来自网上一篇相当不错的文章(PLT and GOT - the key to code sharing and dynamic libraries),原作者是IanWienand,原作地址是http://www.technovelty.org/linux/pltgot.html。共享库是一个现代系统不可分割的部分,但这个实现背后的机制很少被很好地理解。当然,对此有许多的翻译 2012-12-31 10:47:56 · 3941 阅读 · 0 评论 -
C、C++中未定义行为的指引, 第1部分
作者:John Regehr原作:http://blog.regehr.org/archives/213编程语言通常区分正常的程序活动与错误的活动。对于图灵完备语言,我们无法可靠地离线确定一个程序是否潜在执行一个错误;我们必须运行它来看一下。在一个安全的编程语言中,错误在发生时被捕捉。例如,通过其异常系统,Java大体上是安全的。在一个不安全的编程语言中,错误不被捕捉。相反,在执行一个翻译 2013-03-15 11:16:00 · 3010 阅读 · 0 评论 -
每个C程序员应该知道的未定义行为#1/3
作者:Chris Lattner原作:http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html人们偶尔会问为什么在打开优化器时,LLVM编译的代码有时会产生SIGTRAP信号。在深入后,他们发现Clang产生了一条“ud2”指令(假定X86代码)——与__builtin_trap()产生的相同。在这里有几个问翻译 2013-03-29 15:14:21 · 3954 阅读 · 0 评论 -
C、C++中未定义行为的指引, 第2部分
作者:John Regehr原作:http://blog.regehr.org/archives/226当像边界检查GCC,Purify,Valgrind这样的工具第一次出现时,在它们下面运行任意一个UNIX应用程序是有趣的。检查器的输出显示这些应用程序,尽管工作得很好,执行了大量的内存安全性错误,比如使用未初始化数据、数组访问越界等。仅运行grep或不管什么将导致数以十计或百计的这些错误翻译 2013-03-20 14:25:16 · 1816 阅读 · 0 评论 -
每个C程序员应该知道的未定义行为#2/3
作者:Chris Lattner原作:http://blog.llvm.org/2011/05/what-every-c-programmer-should-know_14.html在我们系列的第一部分,我们讨论了未定义行为是什么,及它如何允许C及C++编译器产生比“安全”语言更高性能的应用程序。本帖讨论C实际上怎样“不安全”,解释未定义行为可以导致的某些非常令人惊奇的效果。在第3部分,我翻译 2013-04-03 14:56:17 · 1930 阅读 · 0 评论 -
C、C++中未定义行为的指引, 第3部分(完)
作者:John Regehr原作:http://blog.regehr.org/archives/232一个C或C++实现必须以编程序执行有副作用的操作。例如,如果一个程序执行这些代码行:printf ("Hello\n")printf ("world.\n");该实现这样打印是不允许的:world.Hello这是显然的,但记住编译器可以自由地重新安排你程序做其它事翻译 2013-03-26 12:00:26 · 1383 阅读 · 0 评论 -
每个C程序员应该知道的未定义行为#3/3
每个C程序员应该知道的未定义行为#3/3作者:Chris Lattner原作:http://blog.llvm.org/2011/05/what-every-c-programmer-should-know_21.html在本系列的第一部分,我们回顾在C中的未定义行为,并展示了某些案例,它们允许C比“安全”语言性能更高。在第二部分,我们浏览了由这引起的令人惊讶的bug,及许多程序员关于翻译 2013-04-09 14:05:42 · 2379 阅读 · 0 评论 -
C++11线程,亲合与超线程
原作者:Eli Benderskyhttp://eli.thegreenplace.net/2016/c11-threads-affinity-and-hyperthreading/背景与简介多年来,C与C++标准将多线程及并发处理排斥在外——在“目标机器依赖”世界的阴影之中,以“抽象机器”为目标的标准不包括它。在堆积如山,涉及并发的邮件列表及新闻组提问中,直接而冷血的“C++不知道线翻译 2016-04-29 12:31:45 · 9585 阅读 · 0 评论 -
C++中的可变参数模板
作者:Eli Benderskyhttp://eli.thegreenplace.net/2014/variadic-templates-in-c/回到C++11前夜,编写带有任意参数函数的唯一办法是使用可变参数函数,像printf,使用省略号语法(…)以及伴随的va_族的宏。如果你曾经使用这个方法编写代码,你会知道这有多累赘。除了变成类型不安全外(所有的类型解析必须在运行时在va_arg翻译 2016-06-24 11:17:08 · 4295 阅读 · 0 评论 -
从C++函数返回多个值
作者:Eli Benderskyhttp://eli.thegreenplace.net/2016/returning-multiple-values-from-functions-in-c/因为C++没有内置的从函数或方法返回多个值的语法,程序员在需要时使用各种技术来模拟之,而自C++11的引入,这个数量进一步提升。在本文里,我想提供我们今天所拥有的从函数返回多个值的某些选择的一个概况,翻译 2017-06-30 11:42:10 · 23184 阅读 · 0 评论 -
未定义行为:不只是编程语言
原文地址:https://blog.regehr.org/archives/1438作者:John Regehr这是一个老掉牙但好用的桥段。从这个前提开始:a = b两边同乘以a:a2 = ab两边同减去b2:a2 – b2 = ab – b2左边提取公因数:(a+ b)(a – b) = ab – b2右边提取公因数:(a+ b)(a – b) =翻译 2017-06-23 11:37:35 · 308 阅读 · 0 评论 -
C++中的可变参数模板
作者:Eli Benderskyhttp://eli.thegreenplace.net/2014/variadic-templates-in-c/回到C++11前夜,编写带有任意参数函数的唯一办法是使用可变参数函数,像printf,使用省略号语法(…)以及伴随的va_族的宏。如果你曾经使用这个方法编写代码,你会知道这有多累赘。除了变成类型不安全外(所有的类型解析必须在运行时在va_arg翻译 2018-02-02 11:48:42 · 696 阅读 · 0 评论 -
C++异常的幕后(1)
原文地址:https://monoinfinito.wordpress.com/2013/02/05/c-exceptions-under-the-hood/作者:nicolasbrailo每个人都知道良好的异常处理是困难的。在异常“生命期”的每个层面,出现这种情况的原因有许多:编写异常安全的代码是困难的,异常可能从不期望的位置抛出(双关语),理解设计不良的异常架构是复杂的,因为幕后发生...翻译 2019-03-01 12:01:45 · 381 阅读 · 0 评论 -
C++异常的幕后2:一个小ABI
原文地址:https://monoinfinito.wordpress.com/2013/02/12/c-exceptions-under-the-hood-ii-a-tiny-abi/作者:nicolasbrailo如果我们准备尝试理解为什么异常是复杂的,以及它们如何工作,我们可以读大量的手册,也可以尝试自己编写异常的处理。实际上,我惊讶于这个议题好资料的缺乏:我找到的几乎所有东西要么...翻译 2019-03-05 14:18:08 · 632 阅读 · 0 评论 -
C++异常的幕后3:取悦链接器的ABI
原文地址:https://monoinfinito.wordpress.com/2013/02/19/c-exceptions-under-the-hood-3-an-abi-to-appease-the-linker/作者:nicolasbrailo在我们理解异常的路程上,我们发现重担在libstdc++里完成,如C++ ABI说明的那样。阅读了一些链接器错误,我们上次推断要处理异常我...翻译 2019-03-06 09:35:17 · 763 阅读 · 0 评论 -
C++异常的幕后5:围绕__cxa_begin_catch与__cxa_end_catch的魔术
原文地址:https://monoinfinito.wordpress.com/2013/03/05/c-exceptions-under-the-hood-5-magic-around-__cxa_begin_catch-and-__cxa_end_catch/作者:nicolasbrailo在学习了异常如何抛出后,现在我们正在学习如何捕捉它们的过程中。上次我们在我们的例子里添加了一组...翻译 2019-03-15 11:59:31 · 2228 阅读 · 0 评论 -
C++异常的幕后附录(完)
C++异常的幕后附录I:异常的真正代价原文地址:https://monoinfinito.wordpress.com/2013/06/11/c-exceptions-under-the-hood-appendix-i-the-true-cost-of-an-exception/作者:nicolasbrailo还记得很久以前,当关于异常处理的系列文章刚刚开始时,我提到的这些文章只适用于g...翻译 2019-07-19 11:13:37 · 474 阅读 · 1 评论