C语言可重入函数和不可重入函数
【1】什么是可重入函数和不可重入函数呢?
可重入的函数:一般是保存在栈里面的,是可以被编译器随机的分配内存并且释放的函数称为可重入函数
不可重入函数:一般是指函数返回值是static 型的或者是函数内部定义了static变量或者使用了全局变量等称为不可重入函数
【2】为什区分可重入和不可重入函数呢?
因为多任务操作系统中,需要一个函数要满足同时被多个任务调用,而且要确保每个任务都能单独的维护自己的栈空间或者自身在内存寄存器中的值
【3】怎样识别函数和不可重入函数呢?
/*This will either be
passed on the stack or in a CPU register. Either way is safe as
each task maintains its own stack and its own set of register
values. */
long int handler(int var1) { int var2; var2 = var1 + 2; return var2; }//可重入函数
/* In this case lVar1 is a global variable so every task that calls
the function will be accessing the same single copy of the variable. */
long var1 long int handler(void) {
/* This variable is static so is not allocated on the stack. Each task
that calls the function will be accessing the same single copy of the
variable. */
static long state1 = 0; long 1Return; switch(state1) {case 0: 1Return = state1+10; state1 = 1; break; case 1: 1Return = state1+20; state1 = 0; break; } }//不可重入函数
【C语言可重入函数和不可重入函数】
推荐阅读
- C/C++|有趣的C语言指针(二)——指针声明的那些事儿
- C语言链表实现工资管理系统
- Vue可左右滑动按钮组组件使用详解
- C语言使用链表实现学生籍贯管理系统
- 面试经验|C语言实现的数据结构之------哈希表
- 三种移除list中的元素(可靠)
- R语言|R语言(Newton法、似然函数)
- OpenStack|OpenStack Newton 版本不可不知的53个新特性
- 人工智能如何帮助水电实现可持续发展
- #|多目标优化NSGA-II(非支配排序常见于遗传算法)(C语言实现)