当前位置: 首页 > news >正文

嵌入式软件基础知识——1

目录

C语言中堆和栈的区别

局部变量和全局变量

指针数组、数组指针、指针函数、函数指针

什么时候使用线程和进程

三次握手

const和#define相比有哪些优点

封装、继承和多态

父进程和子进程

C语言中堆和栈的区别

         存储内存不同。

         管理方式不同。

         空间大小不同。

        能够产生碎片不同。

        生长方向不同。

        分配方式不同。

        分配效率不同。

局部变量和全局变量

          在内存管理里面,全局变量放在静态区,局部变量在栈上面去申请空间,

指针数组、数组指针、指针函数、函数指针

         指针数组本质是一个数组,它的每一个成员都是一个指针。

         数组指针本质是一个指针指向一个数组,相当于它的一个指针里存的都是数组的首地址。

        指针函数本质是一个函数,它的一个返回值是一个指针类型。

        函数指针本身是一个指针,它指向的是一个函数,相当于这个指针存储的是函数的首地址。

什么时候使用线程和进程

        进程是操作系统分配资源的基本单位,线程是操作系统调度的基本单位。一个进程中至少包含一个线程,线程不能独立于进程而存在,进程不能共享资源,而线程是可以的。线程可以看做是轻量级的进程,他们的关系可以从这些角度看,从属关系,共享资源,上下文切换的速度和操作对象的不同。

        一个进程创建线程的数目,由可用的虚拟空间和线程的栈的大小共同去决定,只要虚拟空间足够,这个线程就可以创建成功。理论上一个进程可用的虚拟空间大小事2G,默认情况下,一个线程可用的栈空间大小是1MB,所以理论上最多只能创建的线程个数是2048个,如果想要去创建多余2048个线程的话,就需要去修改编译器的设置。如果要创建2k以上个数的线程,就需要减少线程栈的大小,一般情况下不需要这么多的线程。

      当频繁创建和销毁的时候要用线程,创建一个进程要比创建一个线程的代价高出很多,而且耗时的操作使用线程可以提高应用程序的响应速度。并行操作的时候使用线程。考虑数据安全性的时候选用进程。提高单核CPU利用利用线程,多核分布要用进程。

三次握手

      是客户端向服务器建立连接的过程,第一次握手客户端向服务器发送SYN包,等待服务器的确认。第二次握手,服务器收到SYN包并回复客户端SYN加ACK包。第三次握手,客户端收到服务器的SYN加ACK包,并向服务器发送ACK确认包。这样TCP连接成功,完成三次握手。

const和#define相比有哪些优点

       const是用于定义常量的关键字,#define是一个预处理指令,处理的阶段是不同的,const常量可以有数据类型,而宏常量没有数据类型,分析器对const进行类型安全检查只进行字符替换,没有类型安全检查容易引起类型错误。const根据使用位置有不同的作用域。

封装、继承和多态

        封装:是实现面向对象程序的第一步,就是将数据或者函数等集合在一个个的单元中(我们称为“类”),封装的意义在于保护或者防止代码(数据)被无意中的破坏。

        继承:主要实现复用代码,节省开发时间。子类可以继承父类的一些属性和功能。

        多态:是同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行的时候可以通过指向基类的指针来调用实现派生类当中的方法。

父进程和子进程

        父进程调用fork()函数后,克隆出一个子进程,子进程和父进程拥有相同的内容和代码段/数据段和用户堆栈。父进程和子进程,谁先执行是不一定的,要看CPU的调度,所以一般会设置父进程等待子进程执行完毕后再执行。

相关文章:

  • 【SpringBoot篇】阿里云OSS—存储文件的利器
  • 【Java 进阶篇】Jedis 操作 String:Redis中的基础数据类型
  • PyQt6运行QTDesigner生成的ui文件程序
  • Linux C++网络编程-王健伟
  • Qt文件读写详解
  • JMeter+Python 实现异步接口测试
  • Windows环境搭建
  • Jenkins与Docker的自动化CI/CD流水线实践
  • 硬盘上不小心删除了重要文档?试试这6个成功率高的数据恢复工具!
  • billet-doux
  • Centos 7、Debian、Ubuntu中tree指令的检查与下载
  • sql 动态语句
  • Tower for Mac:强大的Git客户端,轻松管理代码版本,提升开发效率
  • [BJDCTF 2020]easy_md5
  • bodymovin:AE动画导出为JSONforMac/win中文版下载
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • ES6简单总结(搭配简单的讲解和小案例)
  • ES6系列(二)变量的解构赋值
  • HTML中设置input等文本框为不可操作
  • JavaScript 一些 DOM 的知识点
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • mongo索引构建
  • Wamp集成环境 添加PHP的新版本
  • 闭包,sync使用细节
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 记一次和乔布斯合作最难忘的经历
  • 实现简单的正则表达式引擎
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 手写一个CommonJS打包工具(一)
  • 突破自己的技术思维
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​LeetCode解法汇总518. 零钱兑换 II
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #162 (Div. 2)
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (2)STM32单片机上位机
  • (2020)Java后端开发----(面试题和笔试题)
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (zt)最盛行的警世狂言(爆笑)
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (三)elasticsearch 源码之启动流程分析
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET Project Open Day(2011.11.13)
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • :中兴通讯为何成功
  • @Bean有哪些属性
  • @KafkaListener注解详解(一)| 常用参数详解