[置顶] 进程概述和内存分配

进程概述和内存分配 本文是作者阅读TLPI(The Linux Programer Interface的总结),为了突出重点,避免一刀砍,我不会过多的去介绍基本的概念和用法,我重点会去介绍原理和细节。因此对于本文的读者,至少要求读过APUE,或者是实际有写过相关代码的程序员,因为知识有点零散,所以我会尽可能以FAQ的形式呈现给读者。 进程一个进程的内存布局是什么样的?每个进程所所分配的内存由很多...
阅读(4311) 评论(0)

[置顶] 文件I/O与系统编程

文件IO与系统编程 本文是作者阅读TLPI(The Linux Programer Interface的总结),为了突出重点,避免一刀砍,我不会过多的去介绍基本的概念和用法,我重点会去介绍原理和细节。因此对于本文的读者,至少要求读过APUE,或者是实际有写过相关代码的程序员,因为知识有点零散,所以我会尽可能以FAQ的形式呈现给读者。 系统编程概览如何确定glibc的版本?可以分为下面两种方式:...
阅读(4282) 评论(2)

[置顶] 可重入、线程安全和异步信号安全

什么是可重入?关于可重入和不可重入这些概念网上可以找到很多,本人表达能力欠佳,所以在此处引用别人的话对这两个概念做一个简单的介绍: 在多线程或有异常控制流的情况下,当某个函数运行到中途时,控制流(也就是当前指令序列)就有可能被打断而去执行另一个函数. 如果在这种情况下不会出现问题,比如说数据或状态不会被破坏,行为确定。那么这个函数就被称做”可重入”的.函数是可重入(reentrant)的,是指对...
阅读(351) 评论(0)

关于文件写入的原子性讨论

​   文件的写入是否是原子的?多个线程写入同一个文件是否会写错乱?多个进程写入同一个文件是否会写错乱?想必这些问题多多少少会对我们产生一定的困扰,即使知道结果,很多时候也很难将这其中的原理清晰的表达给提问者,侯捷曾说过,源码面前,了无秘密,那么本文也希望从源代码的角度分析上述问题。在开始之前我们需要补充一下Linux 文件相关的一些基础原理,便于更好的看懂Linux源代码。​   学过Linux的...
阅读(73) 评论(0)

工作日记

GitHttp   POST data时是否要url encode,这取决于POST数据时带的header,如果是application/x-www-form-urlencoded 这是需要进行url encode的,这也是默认行为,如果是 multipart/form-data就不需要进行url encode,url encode的时候只需要encode value部分即可,key部分用户自己已经...
阅读(94) 评论(0)

C++11 chrono入门

​ C++11引入chrono类来表示时间中的一些概念,以及进行时间相关的计算,这是因为传统使用算术的方式来表示时间间隔和时间点本身这是很模凌两可的。通过使用chrono类库,使用不同的类型来表示不同的时间概念,这有助于通过编译器在编译时来帮助程序员发现一些逻辑错误,为此chrono抽象了如下几个概念:duration​ 一个时间的duration表示的就是一个时间间隔,比如:3秒、3分钟、...
阅读(130) 评论(0)

Effective Modern C++笔记汇总

Effective Modern C++ 目录Item 1: Understand template type deduction….待续...
阅读(954) 评论(0)

Item42 Consider emplacement instead of insertion

​ 如果你有一个容器,存放的是std::string类型,当你通过插入函数(如:insert、push_front、push_back或者是std::forward_list的insert_after)传递一个std::string类型的元素到容器中,逻辑上容器中就会有这个元素了。尽管这可能只是逻辑上的,但并不总是真的,考虑下面这段代码:std::vector vs;...
阅读(229) 评论(0)

Item41 Consider pass by value for copyable parameters that are cheap to move and always copied.

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 函数的参数传递方式有很多种,可以是值拷贝、传指针、传引用、甚至是移动。下面这个addName函数就是将外部传入的值存放到其内部的一个私有的容器中,为了让传递的过程更加高效,addName同时支持引用传递和移动两种方式。class W...
阅读(252) 评论(0)

Item40 Use std::atomic for concurrency, volatile for specific memory

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ volatile关键字在C++中很少被使用,更准确来说是很少被正确使用,它的用途令人很迷惑,甚至这个关键字都不会出现在并发章节。因为这个关键字对于并发编程来说没有任何用处,但是在其他编程语言中这个关键字的用途却很大,因此很值...
阅读(685) 评论(0)

Item39 Consider void futures for one-shot event communication

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 有的时候对于一个任务来说,希望有一种机制可以和另外一个任务进行通信,尤其是那种异步运行的任务,并且会出现一种特定事件的任务,另外一个任务需要等到这个事件的发生才能继续运行,典型的,可以是等待一个重要的数据结构进行初始化,或者是等待...
阅读(625) 评论(0)

Item38 Be aware of varying thread handle destructor behavior

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 在Item37中解释过一个状态为joinable的std::thread对象其底层对应一个系统线程。std::future对象和std::thread比较类似,一个future对象也对应着一个系统线程。尽管如此者两者在析构的时候其行为是不...
阅读(391) 评论(0)

程序的机器级表示

2017年4月趁着临近毕业时间比较充裕,就买了一本深入理解计算机系统(第三版),这本书的第二版之前浅浅的读过一遍只对里面的编译与链接章节印象深刻,其他章节对我来说完全陌生,我深知这本书的好,于是重新拾起这本书。为了加深自己的记忆就开始写博客记录自己的读书笔记。 第三章 程序的机器级表示 gcc4.8 引入-Og选项,使得生成的代码更符合原始程序的结构。 传送类指令的两个操作数不能指向内存位置。 任何...
阅读(190) 评论(0)

信息的表示与处理

2017年4月趁着临近毕业时间比较充裕,就买了一本深入理解计算机系统(第三版),这本书的第二版之前浅浅的读过一遍只对里面的编译与链接章节印象深刻,其他章节对我来说完全陌生,我深知这本书的好,于是重新拾起这本书。为了加深自己的记忆就开始写博客记录自己的读书笔记。 第二章 信息的表示与处理 如果值x是2的n次幂就可以很轻松的通过下面这个公式直接转换为十六进制。n = i + 4j 其中i在[0,3]范...
阅读(194) 评论(0)

Item37 Make std::threads unjoinable on all paths

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 每一个std::thread对象都有两种状态,一个是joinable状态,另外一个则是unjoinable状态。状态是joinable状态的std::thread对象其底层对应的是可以运行的线程。这个线程可以是阻塞的或者是等...
阅读(429) 评论(0)

计算机系统漫游

2017年4月趁着临近毕业时间比较充裕,就买了一本深入理解计算机系统(第三版),这本书的第二版之前浅浅的读过一遍只对里面的编译与链接章节印象深刻,其他章节对我来说完全陌生,我深知这本书的好,于是重新拾起这本书。为了加深自己的记忆就开始写博客记录自己的读书笔记。 第一章: 计算机系统漫游 信息就是位+上下文,相同的二进制位在不同的上下文有着不同的含义 Amdahl定律(阿姆达尔定律),其主要思想是当我...
阅读(262) 评论(0)

Item36 Specify std::launch::async if asynchronicity is essential

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ 当你调用std::async执行一个函数或者是可调用对象的时候,你通常会试图让这个函数异步的执行,但是std::async并不是必须要这样做。只有通过给std::async指定运行的策略为异步的情况下函数才能确保一定是异步执行的...
阅读(348) 评论(0)

Item35 Prefer task-based programming to thread-based

这个系列的文章来自于Effective Modern C++的读书笔记,我抽取了其中比较重要的,不容易理解的,平常我们开发过程中也不太在意的一些Item进行分析。 ​ C++11第一次将并发引入到了语言和标准库中,这使得C++程序员们终于可以直接写跨平台的多线程程序了,不用再自己去写不同平台的线程封装了。C++11在引入线程相关的API的同时也引入了一些并发编程的高级组件例如tasks、fut...
阅读(222) 评论(0)
110条 共8页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:70603次
    • 积分:1775
    • 等级:
    • 排名:千里之外
    • 原创:109篇
    • 转载:0篇
    • 译文:1篇
    • 评论:18条
    博客专栏
    最新评论