0
点赞
收藏
分享

微信扫一扫

【cpp】

Fifi的天马行空 2023-06-01 阅读 57
c++

1.在main执行之前和之后执行的代码有什么?

main执行之前:

  • 静态初始化:编译器会为全局变量和静态变量分配内存,并将它们初始化为默认值(数值型的初始化为0,bool初始化为FALSE,指针类型初始化为NULL等)。这些变量存储在程序的静态数据区域。
  • 动态初始化:对于全局对象和静态对象,在main函数执行之前会调用它们的构造函数进行初始化。这些对象的构造函数会按照它们在代码中的声明顺序来依次被调用。

main执行之后
在main函数执行完毕之前,程序会首先调用所有全局对象和静态对象的析构函数进行清理和释放资源的操作,这些对象的析构函数会按照它们的创建顺序的逆序来调用。(注:对于静态初始化过的全局变量和静态变量来说,它们的生命周期与整个程序的执行时间相同,当程序执行结束时,它们仍然存在于程序的静态数据区域,直到程序完全终止。在程序终止时,操作系统会自动回收程序所占用的内存资源,包括全局变量和静态变量所占用的内存。)
那么说到main函数结束之后的动作时,其实也可以提一下标准库里的atexit函数(也就是登记函数),通过登记函数,可以把一些函数注册为终止处理函数,这些终止处理函数会在main函数终止的时候按照它们被注册顺序的逆序来自动调用。

2、结构体内存的对齐?

要讲结构体内存对齐首先需要讲一下内存对齐是什么

总体来说
结构体的内存对齐就是拿空间换时间。用了内存对齐之后,CPU访问内存的效率更高,而且有一些硬件平台必须要求内存对齐,否则抛出异常。那这就是结构体的内存对齐。

3、指针和引用的区别

它们之间的区别其实还是蛮多的:

  1. 指针是一个变量,存储的是某块内存的地址。而引用是某一个变量的别名,它和原来的变量本质上没有什么区别,是同一个东西。所以说编译器会为指针变量分配内存区域,而不为引用分配内存区域,就是这个原因。
  2. 指针的话是可以为空的。但引用不能为NULL,也就是说它必须与合法的存储单元进行关联。而且引用在定义时必须初始化,但是指针可以先声明,后面再初始化对吧。
  3. 指针在初始化后是可以改变指向的,而引用在初始化之后就不能再改变了,四个字总结就是从一而终。
  4. 理论上指针是可以有多级的,而引用只有一级。也就是说可以存在指针的指针,但不会有引用的引用。
  5. 用sizeof的话,指针得到的是它自己的大小,而引用得到的是引用所指向的变量的大小。
举报

相关推荐

0 条评论