【C语言软开面经】
C语言软开面经
- malloc calloc realloc free动态分配内存
- malloc
- calloc函数:
- realloc 函数:
- free函数:
- 堆栈-内存分区
- 栈区(Stack):
- 堆区(Heap):
- 全局(静态)区:
- 常量区:
- 代码区:
- void* 大小
- float精度
- 虚函数和纯虚函数
- socket编程
- 阻塞、非阻塞、同步、异步
- 多线程
- 编写一个strcpy函数
malloc calloc realloc free动态分配内存
头文件:
#include<stdlib.h>
malloc
头文件:
#include<stdlib.h> 或者 #include<malloc.h>
malloc函数:
void * malloc(unsigned int num_byte);
功能:分配长度为num_byte字节的内存块
入参:需要分配的内存字节数
返回值:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
注意事项:
1、申请了内存空间后,必须检查是否分配成功。
2、当不需要再使用申请的内存时,记得free,否则会内存泄露;
3、虽然malloc()函数的类型是(void *),任何类型的指针都可以转换成(void *),但是最好还是在前面进行强制类型转换,因为这样可以躲过一些编译器的检查。
4、malloc只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。如果需要都初始化为0可以用calloc
5、一般参数传递的形式为(sizeof(要开辟的类型如int)*要开辟的个数).也可以直接写字节数
malloc申请内存有8字节对齐不一定申请多少就分配多少是 分配>=申请
calloc函数:
void* calloc (size_t num, size_t size);
第一个参数的类型是无符号整型(size_t),它表示需要动态开辟的元素的个数.
第二个参数的类型是无符号整型(size_t),它表示需要开辟的每个元素的大小(以字节为单位).
返回值:与malloc相同,如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
realloc 函数:
函数原型:
void* realloc(void* memblock, size_t size)
memblock 需要进行扩容的指针
size 扩容后的大小,字节单位
返回与malloc相同,如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
realloc如何让扩容:
realloc可以扩大或缩小原来已经malloc的内存空间,realloc是从堆上分配内存的.当扩大一块内存空间时,realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,原地扩容 这样扩容后指针首地址不变;
如果数据后面的字节不够,异地扩容,那么就使用堆上第一个有足够大小的自由块,现存的数据然后就被拷贝至新的位置,而老块则放回到堆上.这句话传递的一个重要的信息就是数据可能被移动.
关于free释放:内存经过malloc,再realloc后,如果是扩大内存,只需释放realloc的内存,不用再释放malloc的了。如果是缩小内存,则释放malloc的,不释放realloc的,
使用realloc进行缩容:
缩的仅仅只是使用权限,空间还是没有减少的
free函数:
void free( void * pointer);
功能:释放内存
参数:free函数的参数要么是NULL,要么是一个先前从malloc、calloc或realloc返回的值。向free传递一个NULL参数不会产生任何效果。所以一般释放malloc分配的指针后会将指针指向NULL,因为释放两次或出现错误释放空指针等于啥都没做。
返回值:无
堆栈-内存分区
堆和栈的区别-内存分区
栈区(Stack):
1.由编译器自动分配和释放
2.利用栈存储一些临时变量,包括函数形参、函数内部局部变量、返回值等
3.栈的操作遵循“后进先出”(LIFO)的原则
堆区(Heap):
1.由程序员手动分配和释放的储存区
2.堆在内存中位于bss区和栈区之间
3.通过调用函数如malloc()、calloc()或realloc()来从堆中分配内存
4.必须手动调用free()函数来释放堆内存,否则可能导致内存泄漏
全局(静态)区:
1.内存分配在程序编译之前完成,且在程序的整个运行期间都存在
2.存储全局变量和静态变量
3.静态内存区细分还可以分成:.data段和.bss段
data段:初始化的全局变量、静态变量和只读数据都存放在这个域。
bss段:未初始化的全局变量和静态变量。
未初始化的变量,是在程序中说明,在运行的初始化阶段,才会真正占用存储空间,它的大小不会影响目标文件的大小。总结,一些变量放在bss段,可以减小目标文件的占用空间。
常量区:
1.常量存储区用于存储常量数据,如字符串常量,const修饰的变量
2.常量存储区通常位于静态存储区内
代码区:
1.通常是用来存放程序执行代码的一块内存区域
2.该区域的大小在程序运行前就已经确定,并且内存区域通常属于只读
void* 大小
不管什么类型的指针都是
sizeof(int*)=sizeof(char*)=sizeof(void*)=8
32 位编译环境下,是4 字节
64 位编译环境下,是8 字节
float精度
Float的存储结构
一个浮点数(Floating Point Number)由三个基本成分构成:
符号位(Sign)(占1位)
偏移指数位(阶码、指数)(Exponent)(占8位)
尾数位(Mantissa)(占23位):就是小数点后面的那些小数
float只能保证至少7位(包括整数部分和小数部分)有效数字准确
C语言中的float(单精度浮点数)
float的精度和取值范围
虚函数和纯虚函数
C++相关 不过多阐述
定义一个函数为虚函数,不代表函数为不被实现的函数。
定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。
定义一个函数为纯虚函数,才代表函数没有被实现。
定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。
socket编程
套接字(socket) 是 Linux 下的一种进程间通信机制(socket IPC),使用 socket IPC 可以使得在不同主机上的应用程序之间进行通信(网络通信),也可以是同一台主机上的不同应用程序。socket IPC 通常使用客户端<—>服务器这种模式完成通信,多个客户端可以同时连接到服务器中,与服务器之间完成数据交互。
Socket 编程基础
阻塞、非阻塞、同步、异步
同步:
所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。
例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
异步:
异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
例如 ajax请求(异步): 请求通过事件触发->服务器处理(这时浏览器仍然可以做其他事情)->处理完毕
阻塞:
阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行)。函数只有在得到结果之后才会返回。
有人也许会把阻塞调用和同步调用等同起来,实际上它们是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。 例如,我们在socket中调用recv函数,如果缓冲区中没有数据,这个函数就会一直等待,直到有数据才返回。而此时,当前线程还会继续处理各种各样的消息。
非阻塞:
非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
多线程
多线程
编写一个strcpy函数
函数原型:char* strcpy( char* destination , const char* source) //将source复制到destination
头文件:#include<string.h>
返回值:返回的是第一个目的数字的首地址,类型为char*
注意:
1.strcpy遇到 ‘\0’ 时停止,会将 ‘\0’ 复制到目的数组中,所以源数组里面要有 ‘\0’
2.目的数组的大小>=源数组,否则可能会造成缓冲溢出的错误情况
#include<assert.h>
#include<stdio.h>char* my_strcpy(char* dest, const char* src)//const在* 前面,使不再有 *src被改变的风险
{assert(dest != NULL);assert(src != NULL);char* ret = dest;while (*dest++ = *src++){;}return ret;
}int main()
{char arr1[] = "***************";char arr2[] = "abcdefg";my_strcpy(NULL, arr2);printf("%s", arr1);return 0;
}
相关文章:
【C语言软开面经】
C语言软开面经 malloc calloc realloc free动态分配内存malloccalloc函数:realloc 函数:free函数: 堆栈-内存分区栈区(Stack):堆区(Heap):全局(静态ÿ…...
YOLOv11训练自己的数据集(从代码下载到实例测试)
文章目录 前言一、YOLOv11模型结构图二、环境搭建三、构建数据集四、修改配置文件①数据集文件配置②模型文件配置③训练文件配置 五、模型训练和测试模型训练模型验证模型推理 总结 前言 提示:本文是YOLOv11训练自己数据集的记录教程,需要大家在本地已…...
HTML粉色烟花秀
目录 系列文章 写在前面 完整代码 下载代码 代码分析 写在最后 系列文章 序号目录1HTML满屏跳动的爱心(可写字)2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4...
从零开发操作系统
没有操作系统 要考虑放到什么位置 org 07c00h 我用nasm(汇编编译) 放到7c00处 ibm兼容机 AX发生变化 -寄存器 不可能做存储 内存- 代码段数据段 if else --指令 代码 int a -数据段 必须告诉计算机代码段从哪里开始 改变cs寄存器里面的值可以改变推进寄…...
SigmaStudio中部分滤波器算法有效性频谱分析
一、各类滤波器参数如下图设置 1.1、输入源白噪音经过如下算法处理后Notch\Band Pass\Band Stop,如下频谱分析图 1.2、输入源白噪音经过low pass后处理前后的频谱分析如如下 二、Notch滤波器配置图,如下 2.1、两串联、五个串联和未串联的Notch对白噪音…...
ArcGIS与ArcGIS Pro去除在线地图服务名单
我们之前给大家分享了很多在线地图集,有些地图集会带有制作者信息,在布局制图的时候会带上信息影响出图美观。 一套GIS图源集搞定!清新规划底图、影像图、境界、海洋、地形阴影图、导航图 比如ArcGIS: 比如ArcGIS Pro:…...
滚雪球学MySQL[10.1讲]:常见问题与解决
全文目录: 前言10. 常见问题与解决10.1 数据库连接问题10.1.1 无法连接到数据库10.1.2 连接超时10.1.3 连接数过多 10.2 性能问题10.2.1 查询速度慢10.2.2 数据库锁等待 10.3 数据完整性问题10.3.1 违反外键约束10.3.2 重复记录 10.4 安全问题10.4.1 SQL注入攻击10.…...
利用 Llama-3.1-Nemotron-51B 推进精度-效率前沿的发展
今天,英伟达™(NVIDIA)发布了一款独特的语言模型,该模型具有无与伦比的准确性和效率性能。Llama 3.1-Nemotron-51B 源自 Meta 的 Llama-3.1-70B,它采用了一种新颖的神经架构搜索(NAS)方法&#…...
SpringBoot+Thymeleaf发票系统
> 这是一个基于SpringBootSpringSecurityThymeleafBootstrap实现的简单发票管理系统。 > 实现了用户登录,权限控制,客户管理,发票管理等功能。 > 并且支持导出为 CSV / PDF / EXCEL 文件。 > 本项目是一个小型发票管理系统…...
Updates were rejected because the tip of your current branch is behind 的解决方法
1. 问题描述 当我们使用 git push 推送代码出现以下问题时: 2. 原因分析 这个错误提示表明当前本地分支落后于远程分支,因此需要先拉取远程的更改。 3. 解决方法 1、拉取远程更改 在终端中执行以下命令,拉取远程分支的更新并合并到本地…...
Redis桌面工具:Tiny RDM
1.Tiny RDM介绍 Tiny RDM(Tiny Redis Desktop Manager)是一个现代化、轻量级的Redis桌面客户端,支持Linux、Mac和Windows操作系统。它专为开发和运维人员设计,使得与Redis服务器的交互操作更加便捷愉快。Tiny RDM提供了丰富的Red…...
【Java】酒店管理系统
一 需求: 编写程序 模拟酒店管理系统 : 预订和退订以及查看所有房间 1 需要有一个酒店类 2 需要有一个房间类 3 需要有一个客户端类 public class Test { } 二 分析: 客户端 : 1 先打印所有房间 2 等待用户输入,根据输入情况 判断是预订还是退订 3 等待用户输入房间号 …...
【数据库】Java 中 MongoDB 使用指南:步骤与方法介绍
MongoDB 是一个流行的 NoSQL 数据库,因其灵活性和高性能而广泛使用。在 Java 中使用 MongoDB,可以通过 MongoDB 官方提供的 Java 驱动程序来实现。本文将详细介绍在 Java 中使用 MongoDB 的步骤以及相关方法。 1. 环境准备 1.1 安装 MongoDB 首先&…...
MySQL之内置函数
目录 一、日期函数 二、字符串函数 三、数学函数 四、其它函数 一、日期函数 常见的日期函数如下: 函数名称说明current_date()获取当前日期current_time()获取当前时间current_timestamp()获取当前时间戳date_add(date, interval d_value_type)在date中添加日…...
JVM 基本组成
1.为什么要学习JVM? 未来在工作场景中,也许你会遇到以下场景:线上系统突然宕机,系统无法访问,甚至直接OOM;线上系统响应速度太慢,优化系统性能过程中发现CPU占用过高,原因也许是因为…...
Ubuntu 离线安装 docker
1、下载离线包,网址:https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/ 离线安装docker需要下载3个包,containerd.io ,docker-ce-cli,docker-ce 2、下载完毕后拷贝到ubuntu上用 dpkg 命令安装&am…...
【C++】set详解
📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…...
C++游戏开发:构建高性能、沉浸式游戏体验的关键
引言 C作为游戏开发的核心语言,凭借其卓越的性能和灵活性,已成为许多现代游戏引擎和开发项目的首选。在游戏开发中,C不仅可以实现复杂的游戏逻辑,还能有效管理资源和优化性能。本文将深入探讨C在游戏开发中的应用,结合…...
【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【上篇】
【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【上篇】 一、TFLM是什么?二、TFLM开源项目2.1 下载TFLM源代码2.2 TFLM基准测试说明2.3 TFLM基准测试命令 三、TFLM初步体验3.1 PC上运行Keyword基准测试3.2 PC上运行Person detection基准测试3.3 No module nam…...
第三方供应商不提供API接口?教你四步破解集成难题
API开放需求 在企业数字化转型过程中,异构系统之间的连接是信息化阶段不可或缺的一环。通过应用API,企业能够实现不同系统、平台和应用之间的数据交换与功能调用,从而形成端到端的业务流程协同。然而,很多企业在集成第三方供应商…...
WebAssembly 为什么能提升性能,怎么使用它 ?
文章目录 简介:起源:前端性能提升历史JIT(Just-In-Time)编译器(即时编译) 为什么需要WebAssembly:WebAssembly能做什么:经常说WASM的性能高,为什么高??使用方法:Emscript…...
golang学习笔记13-函数(二):init函数,匿名函数,闭包,defer
注:本人已有C,C,Python基础,只写本人认为的重点。 这个知识点基本属于go的特性,比较重要,需要认真分析。 一、init函数 每个文件都可以定义init函数,它会在main函数执行前被调用,无论它的定义…...
HAproxy,nginx实现七层负载均衡
环境准备: 192.168.88.25 (client) 192.168.88.26 (HAproxy) 192.168.88.27 (web1) 192.168.88.28 (web2) 192.168.88.29 (php1) 192.168.88.30…...
ps aux | grep smart_webrtc这条指令代表什么意思
这条指令是在Linux系统中使用的命令,它的含义是列出所有正在运行的进程,并通过grep命令筛选出包含"smart_webrtc"关键字的进程。 具体解释如下: ps 是一个用于报告当前系统进程状态的命令。aux 是ps命令的选项,其中&a…...
第十三届蓝桥杯真题Python c组D.数位排序(持续更新)
博客主页:音符犹如代码系列专栏:蓝桥杯关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 问题描述 小蓝对一个数的数位之和很感兴趣, 今天他要按照数位之和给数排序。…...
【RabbitMQ】RabbitMq消息丢失、重复消费以及消费顺序性的解决方案
RabbitMq消息丢失主要是有三种情况:生产者消息未发送到服务端、服务端消息没有做持久化导致丢失、消费端未收到消息。解决方案依次如下: 开启事务或使用确认机制。对于一些重要的消息,生产者可以开启事务,确保消息发送成功后再提…...
海陆钻井自动化作业机器人比例阀放大器
海陆钻井自动化作业机器人是现代海洋石油勘探与钻井领域的关键装备,它通过自动化和无人化技术显著提高了钻井效率和安全性。海陆钻井自动化作业机器人主要用于在海上和陆地的钻井平台上进行自动化、无人化的一体化作业。这种设备能够自动切换钻杆,极大地…...
golang学习笔记19-面向对象(一):面向对象的引入
注:本人已有C,C,Python基础,只写本人认为的重点。 这节开始就是面向对象的内容了,为方便复用结构体等类型,本人定义了一个utils包,用于定义这些类型,之后的文章也会用到,希望读者注意…...
【从零开始实现stm32无刷电机FOC】【实践】【7.1/7 硬件设计】
目录 stm32电路磁编码器电路电机驱动电路电流采样电路电机选择本文示例硬件说明 为了承载和验证本文的FOC代码工程,本节设计了一个简易的三相无刷电机 硬件套件,主控采用非常常用的stm32f103c8t6单片机,电机编码器采用MT6701,电机…...
unix中父进程如何获取子进程的终止状态
一、前言 本文将介绍在unix系统中,父进程如何获取子进程的终止状态。本文主要围绕如下函数展开: 1.wait 2.waitpid 3.waitid 4.wait3、wait4 在讨论这些函数前,先介绍一个进程从创建到释放子进程的过程。 二、子进程的创建以及终止 在unix…...
网站如何做二级域名/百度网站提交了多久收录
1、一个plugin中只有一个application 2、rcp4中的application不用自己写类实现,已经包含在application。xmi文件中 3、rcp3创建的项目在rcp4中可以接着开发。 4、perpective添加view不显示 如果在开发中发现,没有打包发布之前,如论运行applic…...
基于html做电商网站论文/北京百度推广官网首页
🌠 『精品学习专栏导航帖』 🐳最适合入门的100个深度学习实战项目🐳🐙【PyTorch深度学习项目实战100例目录】项目详解 数据集 完整源码🐙🐶【机器学习入门项目10例目录】项目详解 数据集 完整源码&…...
一个公司主体可以在多个网站做备案/竞价托管哪家便宜
1.content-type 是指 数据在 http网络通信的时候,字符串的类型 2.请求有 发送数据的 content-type,有 可以接收的content-type 3.而 编码格式,只是 这个字符串里面的 字符的 编码格式,content-type是这个字符串的 类型 4.而有些特定的 需求 例…...
网站301跳转怎么做/现在网络推广方式
buuctf [Nginx]parsing_vulnerability_Fatesec的博客-CSDN博客Nginx 解析漏洞描nginx解析漏洞因为用户配置不当造成的漏洞。解析格式:1.jpg/.php、1.jpg/.php,1.jpg会被当成php格式解析nginx和iis7.x解析漏洞类似,都是加上/.php后文件以php格…...
做金融看哪些网站有哪些内容/惠州市seo广告优化营销工具
为什么80%的码农都做不了架构师?>>> 一两个简单概念长连接与短连接: 1.长连接 Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送和接收。2.短连接 Client方与Server每进行一次报文收发交易时才…...
做汽车网站怎么挣钱吗/网络宣传方式有哪些
Windows Server2012R2已经是很老的版本了,估计还在用的人不多。今天恰好碰到一台内部用的服务器,出现了启动以后任务栏卡死的情况,经过几番努力,终于解决了问题,记录一下,估计其他版本的系统可能也能用得上…...