c语言优化:①提高算法 ②使用位操作
c语音的性能优化
switch() 括号中的内容只能是字符或整型
#define MAX(a,b) a > b ? a : b // ++a > b ? ++a : b
int a = 6;
int b = 5;
MAX(++a,b);
输出为8 define傻瓜式替换
const enum
宏函数和自定义函数的区别:
①从编译阶段 宏函数只在预处理阶段处理 自定义函数要进行编译、汇编、链接
②从执行效率 宏函数只进行替换 执行效率高 自定义函数要进行分配内存、回收内存、函数调用、返回、传参等
简单的函数和频繁调用的函数用宏函数
用内敛函数Inline的情况:
编译时间换空间
空间换执行时间
扩展:防止头文件重复包含导致的重复定义
#ifndef ADD_H
#define ADD_H
……
#endif
写.h文件加这3句话
关键字:
1、register 寄存器变量 CPU中有运算符、控制器、存储器(寄存器)
register int num = 5;
作用:请求编译器尽可能的将变量保存在CPU的内部寄存器中,省去CPU从内存抓取变量的时间,从而提高程序的运行效率,通常用于频繁被访问的变量(循环变量)。
注:①register只能修饰局部变量,不能修饰全局变量和函数②register变量可能不是在内存中存储,不能使用&来获取变量的地址③register修饰变量的类型必须是CPU所接受的
2、static修饰局部变量 静态局部变量,保存在数据区的静态数据区
作用:①使这个局部变量的生命周期延长到整个程序结束之后再释放②static修饰的全局变量只能在本文件访问,不能在其他文件访问③static修饰的函数只能在本文件调用,不能在其他文件调用,static静态函数放在本文件的最前面
static既能修饰变量,也能修饰函数
3、const 只读变量 修饰的是变量名而不是对应空间
★const离谁近,谁就不能修改
注:const修饰一个变量时要给这个变量初始化!
常量:①const 可变 编译阶段
②宏 define 完全的常量 不可变 预处理阶段
可用于修饰变量、函数形参
4、extern int count; 是声明而不是定义
声明此变量是在其他文件定义,当前文件可以访问
5、typedef 重起名字,比define好 define傻瓜式替换,可能出错
6、vclatile 防止编译器优化
应聘时提问频率:static>const>vclatile>typedef>extern>register
扩展:报错内容---声明制定了两个以上的函数 main函数前少;
定义结构体变量 放外面
struct student stu = {.num = 1, . name = "zhangsan", .age = 12, .sex = 'F'};
内存对齐:
会有内存空洞
但能提高程序的性能
放不下的重新开辟内存
编译器默认4个字节对齐 gcc下(1,2,4) 不能写8 只支持1,2,4 4个字节及以上时使用4个字节对齐
设置编译器的对齐方式
#pragma pack(4)
……
#pragma pack()
特殊情况: 输出12 上面3项占8个字节
char
short
char
int
共用体:
union
union node
{
int num;
char ch[5];
};
输出8 等于最长的成员的长度
内存覆盖,在同一段内存内进行操作
大端字节序 & 小端字节序(CPU属性):
int num = 0x12345678;
12:高字节 78:低字节
从低地址开始存放数据
小端:将低字节放在低地址
大端:将高字节存放在低地址
x86 小端
枚举类型(是一种数据类型,在编译阶段处理)
enum node 相当于#define A 0 A = 10时候 A 10 B 11 C 12 D 13
{ #define B 1
A, #define C 2
B, #define D 3
C,
D
};
不需要枚举类型
枚举类型占4个字节
★只能定义整数宏