volatile的意思是”易变的”,这个关键字主要是防止编译器对变量进行优化。即告诉编译器每次存取该变量的时候都要从内存去存取而不是使用它之前在寄存器中的备份。详细分析一下什么是编译器优化,以及为什么使用这个关键字。

static

const

博客摘录「 【八股文】嵌入式软件工程师-2025校招必备-详细整理」2024年7月22日-LMLPHP

typedef与define都是替一个对象取一个别名,以此来增强程序的可读性,

 #define是C语言中定义的语法,它是预处理指令,不能纠错,typedef是关键字,它在编译时处理,所以 typedef具有类型检查的功能

 #define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用

指针和引用的异同是什么?如何相互转换?(C++)
        (f1)相同

都是地址的概念,指针指向某一内存、内容是所指内存的地址;引用则是某块内存的别名。
从内存分配上看:两者都占内存,程序为指针会分配内存,一般是4个字节;而引用的本质是指针常量,指向对象不能变,但指向对象的值可以变。两者都是地址概念,所以本身都会占用内存。
        (f2)区别

        1. 指针是实体,而引用是别名。

        2. 指针和引用的自增(++)运算符意义不同,指针是对内存地址自增,引用是对值的自增。

        3. 引用使用时无需解引用(*),指针需要解引用;

        4. 引用只能在定义时被初始化一次,之后不可变;指针可变。

        5. 引用不能为空,指针可以为空。

        6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身的大小,在32 位系统指针变量一般占用4字节内存。

栈的空间由操作系统自动分配/释放,堆上的空间手动分配/释放。

 栈在C语言中有什么作用?
(a)C语言中栈用来存储临时变量,临时变量包括函数参数和函数内部定义的临时变量。函数调用中和函数调用相关的函数返回地址,函数中的临时变量,寄存器等均保存在栈中,函数调动返回后从栈中恢复寄存器和临时变量等函数运行场景。

(b)多线程编程的基础是栈,栈是多线程编程的基石,每一个线程都最少有一个自己专属的栈,用来存储本线程运行时各个函数的临时变量和维系函数调用和函数返回时的函数调用关系和函数运行场景。 操作系统最基本的功能是支持多线程编程,支持中断和异常处理,每个线程都有专属的栈,中断和异常处理也具有专属的栈,栈是操作系统多线程管理的基石。

 C语言参数入栈顺序的好处就是可以动态变化参数个数。自左向右的入栈方式,最前面的参数被压在栈底。除非知道参数个数,否则是无法通过栈指针的相对位移求得最左边的参数。这样就变成了左边参数的个数不确定,正好和动态参数个数的方向相反。因此,C语言函数参数采用自右向左的入栈顺序,主要原因是为了支持可变长参数形式。

C++的内存管理是怎样的?
        在C++中,虚拟内存分为代码段、数据段、BSS段、堆区、文件映射区以及栈区六部分。

        代码段:包括只读存储区和文本区,其中只读存储区存储字符串常量,文本区存储程序的机器代码。

        数据段:存储程序中已初始化的全局变量和静态变量

        BSS段:存储未初始化的全局变量和静态变量(局部+全局),以及所有被初始化为0的全局变量和静态变量。

        堆区:调用new/malloc函数时在堆区动态分配内存,同时需要调用delete/free来手动释放申请的内存。

        映射区:存储动态链接库以及调用mmap函数进行的文件映射

        栈:使用栈空间存储函数的返回地址、参数、局部变量、返回值

    extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。

左值是指可以出现在等号左边的变量或表达式,它最重要的特点就是可写(可寻址)。也就是说,它的值可以被修改,如果一个变量或表达式的值不能被修改,那么它就不能作为左值。

        右值是指只可以出现在等号右边的变量或表达式。它最重要的特点是可读。一般的使用场景都是把一个右值赋值给一个左值。通常,左值可以作为右值,但是右值不一定是左值。

  有符号和无符号运算,强制转换为无符号,所有a+b会变成(unsigned int)a+b;

 大端:高地址存低字节,低地址存高字节
 小端:低地址存低字节,高地址存高字节


————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/qq_43706223/article/details/133301198

07-23 00:09