C 语言
文章平均质量分 50
C 语言相关
legend050709ComeON
愚公移山
展开
-
原码、反码、补码,计算机中负数的表示
补码转载 2022-12-20 15:15:01 · 2641 阅读 · 3 评论 -
Linux-C数据结构大小
目录什么是字节对齐为什么要字节对齐基本类型及其大小结构体大小计算结构体大小的原则偏移量联合体的大小结构体中嵌套结构体结构体中嵌套联合体结构体中包含数组自定义n字节对齐范例参考什么是字节对齐现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个字节的排放,这就是对齐。为什么要字节对齐各个硬件平台对存储空间的处理上有很大的不同。一转载 2021-12-11 19:44:55 · 534 阅读 · 0 评论 -
多线程下linux random() 性能差
背景random()函数产生随机数,由于是线程安全的,多线程下存在加锁,导致random性能相对较差。可以考虑threadLocalRandom 或者自己实现 一个随机数,比如说 tsc * xxxxx一个随机数。其中xxxx 好像是有依据的。...原创 2021-06-25 11:17:42 · 322 阅读 · 0 评论 -
Linux-C源码到二进制文件生成过程梳理
参考https://segmentfault.com/a/1190000016433897 (库和可执行文件,+++++++)https://segmentfault.com/a/1190000016433829 (可执行文件中的符号表;++++++++)转载 2021-06-06 18:03:01 · 272 阅读 · 0 评论 -
linux C gcc 编译过程
目录前言范例预处理(Preprocessing)作用宏定义指令条件编译指令头文件包含指令特殊符号删除注释范例总结编译(Compilation)作用编译优化范例汇编(Assemble)作用范例链接(Linking)作用范例其他GCC识别的主要文件扩展名前言我们写出的C语言代码(.c文件),若要在机器上运行,需要经过一个编译过程,主要分为如下四个阶段;1.预处理(Preprocessing);2.编译(Com转载 2020-10-20 00:19:05 · 131 阅读 · 0 评论 -
linux C 头文件/库文件 FAQ
(1) 标准头文件对应的实现的linux 下只找到c头文件,但没有找到具体的实现,编译的时候gcc是从哪里找具体的stdio.c和unistd.c等文件的?平时写代码的时候直接include <xxx.h>,编译器从哪里去找相对应的xxx.c?A:头文件只是一句函数声明,实现的代码在标准库对应的.lib或者.so或者.dll,也就是静态或动态库文件里; 包含头文件用于编译,加上库用于链接。实现已经编译进libc库里面了,glibc或者uclibc库。一般可以在/lib...原创 2020-08-10 18:46:28 · 428 阅读 · 0 评论 -
如何编写Makefile(详细)
如何编写makefile软件新人,在CSDN上寻得一篇比较深入的关于编写makefile的文章,转载到本博客。原博客地址:http://blog.csdn.net/haoel如何编写makefile:跟我一起写Makefile(一):http://blog.csdn.net/haoel/article/details/2886跟我一起写Makefile(二):h转载 2014-11-26 10:16:06 · 855 阅读 · 0 评论 -
位运算&异或运算扩展----legend050709
(1)整型数组里除了一个数字之外,其它的数字都出现了两次,找出这个只出现一次的数字;(2)整型数组除了2个数字只出现一次外,其他数字成对出现,找出落单的2个数;(3)数组中每个数会出现3次,只有1个例外的数仅出现1次,找出该数字;-------------(1)整型数组里除了一个数字之外,其它的数字都出现了两次,找出这个只出现一次的数字要求时间复杂度是O(n),空间复杂度是O(...原创 2020-01-09 22:27:21 · 272 阅读 · 0 评论 -
区间最值查询RMQ问题----legend050709
(1)定义RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就是说,RMQ问题是指求区间最值的问题。(2)问题给一个长度为n的数列a1~an和一个整数k。求数列bi=min(ai,ai+1,…,ai+k-1)。(3)分析我们可以很容...原创 2020-01-08 10:43:57 · 139 阅读 · 0 评论 -
linux C位域总结----legend050709
(1)基础(1.1)背景有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。(1.2)定义所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作...原创 2020-01-02 15:07:25 · 456 阅读 · 1 评论 -
生产者消费者之双缓冲区--legend050709
(1)背景(1.1)减少锁的冲突在生产者-消费者模式中,我们常常会使用到队列,这个队列在多个线程共享访问时存在互斥和竞争操作, 意味着每次访问都要加锁。用一个缓冲区,生产者和消费者需要先获取到缓冲区的锁才能进行put和get操作,每一次put和get都需要获取一次锁,这需要大量的同步与互斥操作,十分损耗性能。如果采用双缓冲区的话,一个缓冲区bufferA用于生产者执行put操作,一个缓...原创 2019-12-24 20:00:54 · 1516 阅读 · 1 评论 -
linux多线程协作--legend050709
(1)三个线程协作打印ABCABCABC(2)两个线程协作打印奇数偶数--------------------------------(1)三个线程协作打印ABCABCABC(1.1)思路并发编程核心是三大块:分工、互斥和同步。1)互斥这道题并不涉及共享变量,所以不需要考虑互斥,首先排除。2)同步一眼就能看出这道题考的就是同步,那怎么同步呢?很容易想到的方法,就...原创 2019-12-23 22:54:25 · 133 阅读 · 0 评论 -
hashMap & linkedHashMap & concurrentHashMap 原理----legend050709
(1)hashMap(2)linkedHashMap----------------(1)hashMap(1.1)hashHash 就是把任意长度的输入(又叫做预映射, pre-image),通过哈希算法,变换成固定长度的输出(通常是整型),该输出就是哈希值。这种转换是一种 压缩映射 ,也就是说,散列值的空间通常远小于输入的空间。不同的输入可能会散列成相同的输出,从而不可能...原创 2019-12-21 15:45:08 · 333 阅读 · 0 评论 -
链表的分类--legend050709
链表的分类如下(1) 单向链表(2)单向循环链表(3)双向链表(4)双向循环链表------(1) 单向链表(1.1)特点每个节点只包含一个指针,即后继指针。 单链表有两个特殊的节点,即首节点和尾节点。用首节点地址表示整条链表,尾节点的后继指针指向空地址null。 性能特点:插入和删除节点的时间复杂度为O(1),查找的时间复杂度为O(n)。(2)单向循环链...原创 2019-12-20 14:09:01 · 997 阅读 · 0 评论 -
缓存淘汰机制实现-LRU-LFU——legend050709
(1)缓存是什么缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非广泛的应用,比如常见的CPU缓存、数据库缓存、浏览器缓存等等。(2)为什么需要缓存CPU在从内存读取数据的时候,会先把读取到的数据加载到CPU的缓存中。而CPU每次从内存读取数据并不是只读取那个特定要访问的地址,而是读取一个数据块(cacheline)并保存到CPU缓存中,然后下次访问内存数据的时候就会先从...原创 2019-12-19 18:07:01 · 328 阅读 · 0 评论 -
值传递legend
一: 两个函数直接如何交换数据?? 1:(比如说: 两个成员函数,那么可以将要交换 的数据设置为成员变量 。这样这两个函数都可以访问这个变量了 ) 2: 函数之间的数据传递包括按值传递和引用传递。 A通过函数将value传递给B中的按值传递与引用传递区别: value传递给B后,A希望得到处理过的值,还是保留之前未处理过的value值。 3. 全局变量(作用域大原创 2014-04-19 20:13:24 · 745 阅读 · 0 评论 -
linux进程地址空间分析及其应用_legend
(1)linux进程的虚拟地址传统空间分布注:为了使内核切换到传统内存布局,执行命令#sysctl -w vm.legacy_va_layout=1(因为Linux 2.6.7及以后版本内核已经默认使用新的内存布局方式了)。(1.1)虚拟地址空间分类在32位机器上linux操作系统中的进程的地址空间大小是4G;其中0-3G(0x00000000~0xbfffffff)是用...原创 2019-07-15 11:23:51 · 814 阅读 · 0 评论 -
二分查找自我总结
二分查找: 前提是有序的序列。int BinarySearch(int A[], int left ,int right,int value)或者int BinarySearch(int A[], int n,int value)// n为数组长度。value 为要查找的数。(可以在一个序列中查找等于某个值a的元素的位置,也可以查找大于a的第一个元素的位置)1.idea:在一...原创 2014-03-01 22:42:09 · 836 阅读 · 0 评论 -
二分查找的变形应用3----legend050709
二分查找的应用总结(1)n的平方根保留m位小数(2)从小到大的有序数组循环右移n(n>=0)位,查找最小值;(3)从小到大的有序数组中,查找绝对值最小的元素;(4)从小到大的有序数组循环右移n(n>=0)位,查找某个特定值(5) 二分查找变形之: 变体一:查找第一个值等于给定值的元素; 变体二:查找最后一个值等于给定值的元素; ...原创 2019-07-15 11:28:38 · 393 阅读 · 0 评论 -
剑指offer_常见面试题
参见:https://www.cnblogs.com/AndyJee/category/687572.htmlhttps://www.jianshu.com/c/8581232f6d07头条、快手、阿里的常见面试题:https://blog.csdn.net/xo3ylAF9kGs/article/details/89324669...原创 2019-07-15 14:35:16 · 418 阅读 · 0 评论 -
读者-写者问题
读者与写者问题:(一)定义:多个读者进程,与多个写者进程共享一个临界资源;(二)分析:1.多个读者可以同时读;2.多个写者不可以同时写;3.读者和写者不可以同时进行;(三)注意:读者进程和写者进程,(读者读,则写者不可以写;写者写则读者不可以读)两个进程是明显的互斥关系;而生产者与消费者(生产者生产产品,消费者取产品)是同步关系。所以,不可以继续用生产者与消费者的...原创 2014-09-03 20:55:56 · 1668 阅读 · 0 评论 -
vim编辑器-多行加注释与去注释(转)
转自:https://blog.csdn.net/step_ma/article/details/76474864 在使用vim编辑器时,有时候需要对多行代码进行加注释或去注释,它不像我们在类似于vs等下,需要我们自己输入命令操作,下面将介绍两种方法。方法一:块选择模式1. 插入注释(1)首先按键盘上的ESC进入命令行模式(2)再按Ctrl+V进入VISUAL BLOCK模...转载 2018-07-20 14:56:05 · 359 阅读 · 0 评论 -
linux数据圆整
(1)圆整圆整通常被理解为为满足某种要求而进行的数据修正。按照修正后的数据在数值上是否比原数据大,又可分为向上圆整和向下圆整。它们很像对模拟信号进行采样,对一定范围的数据向一个固定的数据靠拢。 (2)roundup(2.1)宏定义#define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y)) 说明:其实向上圆整可以按照下面的宏定义,可能更加容易理解;...原创 2018-06-26 20:24:35 · 1413 阅读 · 0 评论 -
自动与强制类型转换小总结
一: 普通类型的类型转换:当较低类型的数据转换为较高类型时,一般只是形式上有所改变, 而不影响数据的实质内容,(自动)而较高类型的数据转换为较低类型时则可能有些数据丢失。(强制)如int a=(int)3.14f;a=3;就是较高类型转换为较低类型,数据丢失。总结: 自动类型转换:较低类型到较高类型转换:从低到高: char ->int ->un原创 2014-03-06 17:42:39 · 1772 阅读 · 0 评论 -
static 修饰函数与变量
static作用(修饰函数、局部变量、全局变量)在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容char a原创 2014-03-27 19:43:15 · 765 阅读 · 0 评论 -
指针的大小legend
指针的大小:#include#includeusing namespace std;void main(){ double a[]={1,2,3}; double *x =a; cout cout}运行结果是:244请问这个“4”是什么的大小?指针? 是指针变量占用内存的大小(字节数).在32位原创 2014-04-19 19:21:31 · 705 阅读 · 0 评论 -
getchar函数讲解legend
C语言中的getchar和putchar详解 首先给出《The_C_Programming_Language》这本书中的例子:#include int main(){ int c; c = getchar(); while (c != EOF) { putc原创 2014-04-19 19:23:45 · 1302 阅读 · 0 评论 -
关于rand()函数srand()函数的使用(转)
关于rand()函数srand()函数的使用(2011-04-26 14:25:41)转载▼标签:杂谈分类: 是IT耶~早上上机实验,老师当场布置一个实验。大块的兴趣没有,只记得有一个有意思的任务,产生8*8个100以内的随机数。一看我就happy了。直接rand()0上去了,运行的时候是很开心因为产生的数看起来是随机的。实验转载 2014-03-01 23:24:58 · 1014 阅读 · 0 评论 -
两个变量值的交换legend
两个变量交换问题:一:使用中间变量:方法一:直接变量交换(不推荐)void swap(int a, int b){ int temp; if(a!=b) // 若a==b,则不用交换,交换反而浪费时间。 { temp=a; a=b; b=temp; }} //调用时注意是按值传递。 方法二:一级指针变量交原创 2014-04-27 21:01:29 · 815 阅读 · 0 评论 -
C 程序可移植性_legend
C程序可移植性 1. #define ,typedef ,sizeof() 的使用 (1) typedef 0. typedef使用方法 : typedef oldtype newtype; 1. typedef定义与平台无关的新类型(提高程序可移植性) : 如:定义一个叫 REAL 的浮点类型,在目标平台一上,让它表示最高精度的原创 2014-05-14 16:57:15 · 981 阅读 · 0 评论 -
C 陷阱与缺陷 总结_legend
C陷阱与缺陷寻找一:词法错误1. == 与= 的不同2. 逻辑运算符与按位运算符&& &|| |! ~3.词法分析中的 贪心法:编译器将程序分解为符号的方法:从左到右扫描,每一个符号应该包含尽可能多的字符。如:a---b;等价于 (a--)-b;如:y=x/*p;本意是y除以指针p所指的 内容实际上:编原创 2014-05-12 20:56:53 · 1650 阅读 · 0 评论 -
rand,srand自我总结
rand(),srand(int seed)函数自我总结:srand初始化随机种子,rand产生随机数(1) rand:表头文件:#include函数头: int rand()rand()会返回一随机数值,范围在0至RAND_MAX 间。RAND_MAX是库中定义的常量、(2)函数二:void srand(unsigned seed);原创 2014-03-02 12:41:42 · 894 阅读 · 0 评论 -
对象间值传递,函数参数按值,引用传递_legend
一: 如何在两个类A和B中传递Value?? (1)方法一: 两个类中都有这个要传递的value成员变量。 均有getValue(),setValue() 函数。 从一个类中getValue(),然后将value通过另一个类的setValue() 就可以了 。 二: 两个类A和B如何共享一个变量value?? (1)方法一: 将需原创 2014-04-01 20:12:29 · 1184 阅读 · 0 评论 -
生成m个0到n范围内的不同的随机数
(1)背景在0~n的范围内,生成m个不同的随机数,每个数出现的概率相同;或者生成m个0~(m-1)范围内的不同的随机数; (2)方法一(2.1)原理最容易想到的方法,是逐个产生这些随机数,每产生一个,都跟前面的随机数比较,如果重复,就重新产生。(2.2)伪代码实现void get_rand(int *a, int m, int n, int k)//结果存在a中{ int i,j,t; ...原创 2018-06-25 21:55:24 · 1571 阅读 · 0 评论 -
在Makefile中进行宏定义-D
在源代码里面如果这样是定义的:#ifdef MACRONAME//可选代码#endif那在makefile里面gcc -D MACRONAME=MACRODEF或者gcc -D MACRONAME关键词: Make宏定义 Make传递宏定义 Makefile中添加宏定义 Makefile -D在Makefile中我们可以通过宏定义来控制源程序的编译。只要在Makefile中的C...转载 2018-05-24 19:42:04 · 6886 阅读 · 0 评论 -
判断两个区间是否重叠_总结
(1)问题:假设有两个区间M(s1, e1)和N(s2, e2),如何判断两个区间是否有交集?(2)解答:命题A: M和N相离,且M在前N在后。(当 s2 > e1时成立)命题B: M和N相离,且M在后N在前。 ( 当 s1 > e2时成立)如果命题(A or B)为真,则两个区间每有交集。则如果命题(A or B)都为假,则两个区间有交集。注: 其实重叠的有4种,两种相交,两种包含...原创 2018-05-23 11:48:00 · 4788 阅读 · 1 评论 -
C 代码优化_legend
C代码优化C 代码优化方案(注 :有些代码来自于)(零) 优化分类 :(一) 选择合适的算法和数据结构 :(二) 数据类型的选择 :(三) 减少运算的强度 :(1) 查表 (游戏程序员必修): (2) 求余运算 :(3) 平方运算 :(4) 用移位实现 *,/ 运算 :(5) 尽量变除法为乘法 :(6) 使用自增,自减 :原创 2014-05-15 16:50:29 · 765 阅读 · 0 评论 -
二维数组动态开辟内存
C中为二级指针动态开辟空间:(1)C中二级指针动态开辟空间:int ** a;a=(int**)malloc(m*sizeof(int*)); for(i=0; i { a[i]=(int*)malloc(n*sizeof(int)); } (2)C++中二级指针动态开辟空间: int **a = n原创 2014-06-02 12:10:14 · 2255 阅读 · 0 评论 -
迷宫C实现
#include #include #define MAXSIZE 20 #define ERROR -1 #define OK 1 #define FALSE 0 #define TRUE 1 typedef enum{RIGHT,DOWN,LEFT,UP}Direction;转载 2014-06-08 20:53:35 · 784 阅读 · 0 评论 -
C++/C程序、函数结束
《一》C++函数结束与异常处理:(1)return: (1.1)功能简介: return语句用于结束当前正在执行的函数,并将控制权返回给调用此函数的函数。 (1.2)使用方法: (1.2.1)不带返回值的return语句只能用于返回类型为void的函数。 (1.2.2)任何返回类型不是void的函数都必须返回一个值,而且这个返回值的类型必须和函数的返回类型相同原创 2014-06-08 20:50:34 · 7213 阅读 · 0 评论