现在位置: 首页

C语言标准发展历史以及各种libc实现

2019-11-09 08:33 工业·编程  ⁄ 共 909字 暂无评论
1.C语言的标准发展历史 C语言的标准经历过C89、C90、C99以及C11几个版本的发展 (1)C89 1983年,美国国家标准协会ANSI组成了一个委员会,X3J11,为了创立C的一套标准。经过漫长而艰苦的过程,该标准于1989年完成,并在作为ANSIX3.159-1989 "Programming Language C"正式生效。这个版本的语言经常被称作"ANSIC",或有时称为"C89"。 (2)C90 在1990年,ANSI C标准(带有一些小改动)被美国国家标...
阅读全文

变长参数探究

2019-11-08 08:17 工业·编程  ⁄ 共 4775字 暂无评论
变长参数,指的是函数参数数量可变,或者说函数接受参数的数量可以不固定。实际上,我们最开始学C语言的时候,就用到了这样的函数:printf,它接受任意数量的参数,向终端格式化输出字符串。本文就来探究一下,变长参数函数的实现机制是怎样的,以及我们自己如何实现一个变长参数函数。在此之前,我们先来了解一下参数入栈顺序是怎样的。 函数参数入栈顺序 我们可能知道,参数入栈顺序是从右至左,是不是这样的呢?我们可以通过...
阅读全文

白云先生:猎杀美股—-国际金融战的大高潮

2019-11-07 14:18 战略·谋略  ⁄ 共 6416字 评论 13 条
一、美国,中国和欧洲,全球三大资本中心的三国杀 在当前的国际金融格局中,存在三大资本中心。这三个中心,就是中国,美国和欧洲。三大资本中心,资本的配置策略又各不相同,美国是把资本集中部署在股市上,把美股作为美国的核心资产,形成了美股问题。欧洲是把资本部署在债市上,把欧债作为欧债的核心资产,形成了欧债问题。中国把资本部署在了房市上,把房地产作为中国的核心资产,形成了中房问题。 国际金融猎杀,关键...
阅读全文

libc、glibc的关系

2019-11-07 08:05 工业·编程  ⁄ 共 673字 暂无评论
glibc是linux下面c标准库的实现,即GNU C Library。glibc本身是GNU旗下的C标准库,后来逐渐成为了Linux的标准c库,而Linux下原来的标准c库Linux libc逐渐不再被维护。Linux下面的标准c库不仅有这一个,如uclibc(https://www.uclibc.org/)、klibc,以及上面被提到的Linux libc,但是glibc无疑是用得最多的。glibc在/lib目录下的.so文件为libc.so.6。 任何类似Unix的操作系统都需要一个C库:定义“系统调用”的库和其他基本工具,...
阅读全文

linux内核中的__KERNEL__宏

2019-11-06 21:12 工业·编程  ⁄ 共 738字 暂无评论
  The __KERNEL__ macro is defined because there is programs (like libraries) than include kernel code and there is many things that you don't want them to include. So most modules will want the__KERNEL__ macro to be enabled. When you compile your kernel, __KERNEL__ is defined on the command line. User-space programs need access to the kernel headers, but some of the info in kernel headers ...
阅读全文

习近平:在第二届中国国际进口博览会开幕式上的主旨演讲

2019-11-05 21:51 战略·谋略  ⁄ 共 2996字 暂无评论
尊敬的马克龙总统, 尊敬的霍尔尼斯总理、米佐塔基斯总理、布尔纳比奇总理, 尊敬的各位议长, 尊敬的各位国际组织负责人, 尊敬的各代表团团长, 各位来宾, 女士们,先生们,朋友们: 在这多彩的深秋时节,很高兴同大家相聚在黄浦江畔。现在,我宣布,第二届中国国际进口博览会正式开幕! 首先,我谨代表中国政府和中国人民,并以我个人的名义,对远道而来的各位嘉宾,表示热烈的欢迎!向来自世界各地的新老朋友们,致以诚...
阅读全文

linux内核中的likely()和unlikely()宏的作用

2019-11-05 20:54 工业·编程  ⁄ 共 1958字 暂无评论
在看linux内核代码的时候,经常会看到likely(x)和unlikely(x)宏的使用。那这两个宏有什么作用呢? 这两个宏在内核中的定义如下: # define likely(x) __builtin_expect(!!(x), 1) # define unlikely(x) __builtin_expect(!!(x), 0) 可见这里使用了gcc的内建函数__builtin_expect()。 __builtin_expect (long exp, long c)函数: 该函数用来引导gcc进行条件分支预测。在一条指令执行时,由于流水线的作用,CPU可以同时完成下...
阅读全文

内存踩踏实例记录

2019-11-04 23:02 工业·编程  ⁄ 共 805字 暂无评论
今天遇到一下奇怪的段错误,研究发现原来是内存写越界了。 函数片段如下 ht_insert_he --> ht_index --> hashfunction void ht_insert_he(hash_table *table, hash_entry *entry) {     hash_entry *tmp;     unsigned int index;       entry->timestamp = time(NULL);     entry->next = NULL; ...
阅读全文

介绍几种踩内存工具的工作原理

2019-11-03 23:01 工业·编程  ⁄ 共 1512字 暂无评论
众所周知,踩内存是一个非常麻烦的问题,不管是在应用层或是内核层,关于踩内存的检测也有各种各样的工具,比如应用层的优秀开源valgrind,内核内置的kmemcheck等。关于这些工具的具体信息就不在这里做进一步描述了,本文主要简单介绍一下几种踩内存工具的工作原理。 一种最为简单的踩内存工具为通过给分配的内存前后多加上一小块内存,用于存放我们预先设定的值,比如Crc和Magic: 不管是应用程序(App)或是内...
阅读全文

C语言实现线程池功能

2019-11-02 22:52 工业·编程  ⁄ 共 13257字 暂无评论
1. 线程池基本原理 2. 线程池C语言实现 2.1 线程池的数据结构 #include <stdio.h> #include <pthread.h> #include <stdlib.h> #include <string.h> #include <signal.h> #include <errno.h> #include <unistd.h> typedef struct {     void *(*function)(void *);  /*函数指针,回调函...
阅读全文