首页 > 编程语言 >221010嵌入式系统高级C语言编程_笔记

221010嵌入式系统高级C语言编程_笔记

时间:2022-10-10 13:04:55浏览次数:44  
标签:变量 嵌入式 char 编译器 数组 堆栈 221010 C语言 buf

C语言不检查数组越界和内存缓冲区越界


编译器对局部变量有两种存储方式,对于简单数据类型的变量(比如int,char,

short或者指针变量等)编译器会首先尽可能的采用CPU内部的通用寄存器来表示,

第二种方式是对于那些没有办法用寄存器表示的变量或数组,结构体等变量如buf[8*1024]采用当前的堆栈空间来存储

对于buf而言,很容易将系统的堆栈空间耗尽,如果算法必须采用大数组,可以采用 static char buf[8*1024] 的方法来定义,虽然这同时会带来程序不可重入的问题。



221010嵌入式系统高级C语言编程_笔记_编译器

221010嵌入式系统高级C语言编程_笔记_编译器_02


将函数中在堆栈中申请的临时变量地址return是非常危险的,出函数后,该函数的栈帧就已经无效了,返回这段内存地址毫无意义












标签:变量,嵌入式,char,编译器,数组,堆栈,221010,C语言,buf
From: https://blog.51cto.com/u_15789360/5743207

相关文章

  • c语言整型变量用浮点型输出_转载
    C语言学习实践​​https://blog.csdn.net/solomon1558/article/details/40798901​​摘要本文将从C语言变量的本质,不同类型变量在内存中的存储方式,类型强制转换,格式输出4个......
  • 【C语言】用"I love you!"打印心形
    #include<iostream>#include<cmath>usingnamespacestd;intmain(){floatx,y;strings="Iloveyou!";intl=s.length();for(y=1.3f;......
  • 学习笔记275—C语言第2期(Windows11系统下解决VC6.0无法运行)
    Windows11系统下解决VC6.0无法运行1、右键点击图标—>选择“打开文件所在位置” 2、将“MSDEV”修改成“MSDEVL” 3、将此处“MSDEV.EXE”修改成“MSDEVL.EXE”......
  • C语言-数组打印图形
    例题:打印等腰三角形答案intmain(intargc,char*argv[]){ intn; scanf("%d",&n); inti,j,k;//  打印行打印星号打印空格。 for(i=1;i<=n;i++) { for(j=1;j<=......
  • 《C语言 —— void*的作用》
    1.void*类型指针void指针可以指向任意类型的数据,就是说可以用任意类型的指针对void指针对void指针赋值。int*a;void*p;p=a;a=(int*)p 如果要将void指针......
  • 转载:关于vscode(Visual Studio Code)编写c语言 中文乱码问题
    关于vscode(VisualStudioCode)编写c语言中文乱码问题。处理方法:选择菜单File > Preferences >Settings,找到TextEditor>Files中的Encoding,更改为Simplified......
  • C语言每日一题——第十二天
    第十二天小明今天要挑战一下算法!他的算法第一课是:二分查找。小明随意设置了一个函数:\(y=x^2+2x-1,x\in(-10^4,10^4)\)。他将使用二分法,找出给出的数字所在区间,精度为\(\p......
  • 【10月】C语言学习第1天
    指针符号&和*&用于指向变量数据位置,用十六进制表示*用于指向变量内存储的值-----------------------------------------函数对变量进行操控:由于函数返回只有一个值,固......
  • C语言 初识C语言04
    常量C语言中的常量分为以下几种:1、字面常量:直观写出来的值intmain(){3;//字面常量3=5;//error,常量的值不能被改变return0;}2、const修饰的常变量#include<stdio.h>intm......
  • 扫雷游戏---手把手教程(含源码)【C语言】
    ......