C/C++复习(二)

一.结构体内存对齐计算

前言:对于结构体的相关内容由于我们不管是在C还是C++中都是不断使用的,反而不容易被遗忘,而结构体计算内存部分就不一样了,如果不回顾,很容易就出现忘记,所以让我们开始学习吧!!!

结构体内存对齐规则:

1.结构体的第一个成员变量对齐到结构体变量起始位置(偏移量为0)

2.其他变量要对齐到对齐数的整数倍位置

(对齐数:编译器默认对齐数与该变量大小的较小值,vs默认为8,linux无默认)

3.结构体总大小为最大对齐数的整数倍(最大对齐数为:所有对齐数中最大的一个)

4.如果变量数结构体,就将该变量对齐数看成该结构体最大对齐数

大体就是这些内容,下面这篇博客中有例子和详细求解过程,欢迎大家访问

C语言之结构体-CSDN博客



二.C、C++动态内存管理

我们知道由于直接定义空间大小无法满足一些程序想要在运行时确定空间大小的需求,所以引出了动态开辟空间大小,下面我们就来讨论C、C++动态开辟内存管理

malloc:

cpp 复制代码
void* malloc(size_t size);
//向内存中申请一块连续的空间,并返回指向这块空间的指针,失败返回nullptr

calloc:

cpp 复制代码
void* calloc(size_t num,size_t size);
//开辟num个大小为size的元素的空间,并将空间中每个字节初始化为0

//注意:
//malloc是不会将每个字节初始化为0,calloc才会

realloc:

cpp 复制代码
void* realloc(void* ptr,size_t size);
//将ptr所指向的空间做调整,重新开辟一块空间大小为size的空间,并将ptr所指向的内容拷贝到该空间

//作用:通常是用来空间扩容的

free:

cpp 复制代码
void free(void* ptr);
//将动态开辟的空间销毁,如果ptr指向的非动态开辟的空间结果未定义

上面函数的头文件为:#include <stdlib.h>

C++则是用new和delete来实现动态开辟空间

注意点:

如果是自定义类型,new和delete需要考虑构造和析构函数:

new原理:1.先调用底层operator new(实际实现是malloc)2.再调用该对象的构造函数

delete原理:1.先调用对象的析构函数 2.再调用底层operator delete(实际是free)

new T[N]的原理:1. 调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申请 2. 在申请的空间上执行N次构造函数
delete[]的原理:1. 在释放的对象空间上执行N次析构函数,完成N个对象中资源的清理 2. 调用operator delete[]释放空间,实际在operator delete[]中调用operator delete来释放空间

其他部分可以参考以下博客:

动态内存管理-CSDN博客

C++动态开辟与C对比-CSDN博客



三.编译、链接

对于该部分,看前面我写的博客即可完成复习!!!

编译与链接-CSDN博客

预处理详解-CSDN博客



最后感谢大家的支持!!!

相关推荐
蒋星熠1 分钟前
如何在Anaconda中配置你的CUDA & Pytorch & cuNN环境(2025最新教程)
开发语言·人工智能·pytorch·python·深度学习·机器学习·ai
Humbunklung1 小时前
unordered_map使用MFC的CString作为键值遇到C2056和C2064错误
c++·stl·mfc
We....1 小时前
Java分布式编程:RMI机制
java·开发语言·分布式
€8111 小时前
Java入门级教程17——利用Java SPI机制制作验证码、利用Java RMI机制实现分布式登录验证系统
java·开发语言·java spi机制·远程传输数据
2301_815357701 小时前
parameterType和@Param注解的区别
java·开发语言·数据库
tyatyatya1 小时前
MATLAB中进行视觉检测入门教程
开发语言·matlab·视觉检测
2401_845417451 小时前
set和map
java·开发语言
2301_821046522 小时前
Python的深度学习
开发语言·javascript·ecmascript
爱编程的化学家2 小时前
代码随想录算法训练营第十一天--二叉树2 || 226.翻转二叉树 / 101.对称二叉树 / 104.二叉树的最大深度 / 111.二叉树的最小深度
数据结构·c++·算法·leetcode·二叉树·代码随想录
扯淡的闲人2 小时前
多语言编码Agent解决方案(2)-后端服务实现
开发语言·python·深度学习