【专题】C/C++ 编程语言

2016-10-06 Thursday     misc

C/C++ Logo

简单介绍下与 C 语言相关的内容。

程序基本概念

不只是 C 相关代码,实际上是 Linux 中的基本介绍。

  • 程序简介 与执行程序相关的一些基本概念,例如 ELF 格式、内存分布等。
  • 编译链接 编译链接过程,以及静态库和动态库基本概念的介绍。
  • ELF 详解 介绍 ELF 文件格式的详细内容。
  • 安全编译选项 GCC 提供的一系列安全编译的选项,简单介绍。
  • 解析二进制 分析二进制文件时常用的命令,例如readelf、nm、ldd等。

程序加载

详细介绍从 Bash 启动运行,到最终调用到函数执行。

  • 加载过程 包括从Bash到内核加载,再到用户态的ld加载解析。
  • Preload 简介 允许应用在加载其它动态库之前先加载,可以用来替换某些函数。
  • PLT GOT 介绍 介绍动态库在运行过程中如何寻找到函数的地址。

其它

C 语言

在 1989 年,美国国家标准协会 (ANSI) 对 C 语言进行了标准化,此时 C 语言又被称为 ANSI C。在一年后被国际标准化组织 ISO 采纳,所以 C 语言在 ISO 中有了一个官方名称 ISO/IEC 9899:1990 ,其中 9899 是 C 语言在 ISO 标准中代号 (C++ 是 14882),冒号后面的 1990 表示当前修订好的版本是在 1990 年发布。

所以,最开始的 C 语言标准也被称为 C89、C90 或者 C89/C90,后续又在 1999、2007、2011 进行了改进。另外,C++ 在从 C++11 之后,基本固定每三年发布一个新版本。

  • 整数介绍 包括了类型提升、整型溢出等。
  • 宏使用 一些基本使用规则,以及常见注意事项。
  • 数据对齐 结构体以及内存的对齐方式。
  • 位域和字节序 位域或位段相关概念,以及大小端字节序相关的内容。
  • inline 简介 有点类似于 C 中的宏,但是又有所区别。
  • 指针简介 包括了基本概念、函数指针等概念的介绍。
  • 字符串操作 与字符串相关的函数,例如格式化、查找、转换等等。

杂项

其它

介绍一些乱七八糟的东西。

工具集

介绍一些常见的工具使用方法,包括了编译、测试等。

自动编译

  • Makefile 也就是最基本的 Makefile ,其它工具一般最后都是生成该文件。
  • AutoTools 比较老也是比较经典的自动编译工具。
  • CMake 最常用的自动编译工具。
  • Linux Package 管理 Linux 提供的一种工具,通常在动态库编译时的参数配置。

gcc

其它

  • 特性定制 对函数、告警等选项的定制,主要是 pragma、attribute 属性的介绍。
  • 常用技巧 常用的参数、64位编译32位代码等等。

gdb

测试

其它

C++

可以认为是在 C 的基础上添加了面向对象的功能,其编译、链接、调试等基本都可以通过一个工具链完成。

基本概念

使用详解

并发编程

其它

libev

libev 是一个基础的高性能事件库,提供了跨平台能力,而且代码很少,使用非常灵活。除了基础的 IO、定时器、信号的处理之外,同时还提供了一些循环中经常使用的 hook 处理,以及常用

并发编程

早期 CPU 通过提高主频来提升 CPU 的性能,不过因为工艺问题以及摩尔定律的终结,目前更加倾向于多核心的发展,对于编程来说,更像一个小型的分布式系统,也导致多线程编程要难很多。

另外,为了弥补 CPU 与主存处理速度的差异,在两者之间增加了多级缓存,提升性能的同时,也带来很多编程上的问题,尤其对于 Lock-Free 的编程。

线程编程

硬件基础

编程方法

并发编程涉及到很多的知识点,包括了从编译器、到 CPU 、内存与 Cache 的关系等等,都有可能会导致代码与实际执行不一致,原则是保证单线程下的一致。

相关资料



如果喜欢这里的文章,而且又不差钱的话,欢迎打赏个早餐 ^_^


About This Blog

Recent Posts

Categories

Related Links

  • RTEMS
    RTEMS
  • GNU
  • Linux Kernel
  • Arduino

Search


This Site was built by Jin Yang, generated with Jekyll, and hosted on GitHub Pages
©2013-2019 – Jin Yang