嵌入式学习day13

server/2025/1/16 2:35:08/

每日面试题

解释堆和栈的区别

①申请方式
stack(栈):由编译器自带分配释放,存在函数的参数值,局部变量等。
heap(堆):程序员自己申请,并指明大小(malloc函数)
②申请后的系统响应
stack(栈):只要栈剩余空间>所申请空间,都会提供
heap(堆):操作系统有记录空间空闲内存的链表:收到申请→遍历链表→寻找→申请空间的堆节点
③申请内存的大小限制
stack(栈):向低地址扩展的数据结果,连续内存区域,栈获得的空间较小。
heap(堆):向高地址扩展的不连续内存区域;链表遍历方向为低地址向高地址,堆获得空间灵活,空间也大。
④申请效率
stack(栈):系统自由分配,速度快
heap(堆):速度慢,容易产生内存碎片
⑤存储内容
stack(栈):主函数的下一条指令的地址、函数的各个参数,参数由右往左进栈、函数的局部变量(静态变量不入栈)。调用结束后,顺序相反,局部变量先出栈。
heap(堆):程序员自己安排
⑥分配方式
stack(栈):栈有两种分配方式,静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配,动态分配由alloca函数进行分配,但栈的动态分配和堆是不同的,栈的动态内存由编译器进行释放,无需手工实现。
heap(堆):堆是动态分配的,没有静态分配的堆。

结构体和联合体的区别

都是由不同的数据类型成员组成,但是在同一时刻,联合体只存放了一个被选中的成员(所有成员公用一块地址);而结构体成员都存在(不同成员存放地址不同)
联合体:

union abc
{int a;char c;
};int main()
{union abc q;printf("a address:%p,c address:%p", &q.a, &q.c);
}

运行结果:a address:000000000061fe1c,c address:000000000061fe1c
a和c公用一个地址。
结构体:

struct abc
{int a;char c;
};int main()
{struct abc q;printf("a address:%p,c address:%p", &q.a, &q.c);
}

运行结果:a address:000000000061fe18,c address:000000000061fe1c
a和c不共用一个地址。
联合体不同成员赋值,会对其他成员重写,原来成员的值会不存在。
结构体的不同成员赋值是互不影响的。

每日算法

三合一。描述如何只用一个数组来实现三个栈。

class TripleInOne {
private:vector<int> s;int stackSize;int spointer[3];    //记录三个栈当前的指针下标
public:TripleInOne(int stackSize) {s = vector<int>(stackSize*3,0);  //前一个参数为容器大小,后一个参数为容器中的初始值this -> stackSize = stackSize;spointer[0]=0;spointer[1]=stackSize;spointer[2]=stackSize*2;}void push(int stackNum, int value) {if(spointer[stackNum] < (stackNum+1)*stackSize){s[spointer[stackNum]++]=value;}}int pop(int stackNum) {int res = -1;if(spointer[stackNum] > stackNum*stackSize){res = s[--spointer[stackNum]];}return res;}int peek(int stackNum) {int res = -1;if(spointer[stackNum] > stackNum*stackSize){res = s[spointer[stackNum]-1];}return res;}bool isEmpty(int stackNum) {return spointer[stackNum] == stackNum*stackSize;}
};

http://www.ppmy.cn/server/37982.html

相关文章

【Linux 性能详解】CPU性能篇

目录 平均负载&#xff08;Load Average&#xff09; CPU上下文切换 进程上下文切换 线程上下文切换 中断上下文切换 中断 硬中断 软中断 CPU使用率 性能分析工具 平均负载&#xff08;Load Average&#xff09; 平均负载&#xff1f;这个词对很多人来说&#xff0c…

List的两种实现

前置知识&#xff1a; 数组 baseAddress&#xff1a;数组的首地址 dataTypeSize&#xff1a;数组中元素类型的大小&#xff0c;如int为4字节 为什么数组索引从0开始&#xff0c;假如从1开始不行吗&#xff1f; 在根据数组索引获取元素的时候&#xff0c;会用索引和寻址公式来计…

欢乐钓鱼大师辅助,钓鱼技巧大全!新手辅助!

近期&#xff0c;《欢乐钓鱼大师》在游戏界掀起了一股狂潮&#xff0c;吸引了大批玩家的加入。对于新手玩家来说&#xff0c;要想在游戏中游刃有余&#xff0c;掌握一些钓鱼技巧和获取体力的方法是至关重要的。下面&#xff0c;我将为大家详细介绍游戏中的一些攻略&#xff0c;…

【Unity】如何获得两个List各自的补集

【背景】 在项目中需要处理这样的逻辑,将所有活跃客户端的IP地址形成一个IP地址列表,与项目中已经生成按钮实例的IP按钮进行比照,如果某一个IP处于活跃状态,但是并未生成实例按钮,那么就生成实例。如果一个按钮的IP地址不存在于当前的IP地址列表中,则需要销毁这个Button…

GWO-CNN|多输入回归预测|灰狼算法优化卷积神经网络|Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…

机器人系统ros2-开发实践07-将机器人的状态广播到 tf2(Python)

上个教程将静态坐标系广播到 tf2&#xff0c;基于这个基础原理这个教程将演示机器人的点位状态发布到tf2 1. 写入广播节点 我们首先创建源文件。转到learning_tf2_py我们在上一教程中创建的包。在src/learning_tf2_py/learning_tf2_py目录中输入以下命令来下载示例广播示例代码…

[Linux] GDB使用指南----包含CentOS7下安装以及使用

什么是GDB&#xff1f; GDB 是由 GUN 软件系统社区提供的调试工具&#xff0c;同 GCC 配套组成了一套完整的开发环境&#xff0c;GDB 是 Linux 和许多 类Unix系统的标准开发环境。可以用来调试C、C、Go、java、 objective-c、PHP等语言。 GDB的作用 程序启动时&#xff0c;可…

数据结构-线性表-应用题-2.2-12

1&#xff09;算法的基本设计思想&#xff1a;依次扫描数组的每一个元素&#xff0c;将第一个遇到的整数num保存到c中&#xff0c;count记为1&#xff0c;若遇到的下一个整数还是等于num,count,否则count--,当计数减到0时&#xff0c;将遇到的下一个整数保存到c中&#xff0c;计…