24什么网站建设开发一个相亲软件需要多少钱
1、goto的使用场景有哪些?并讨论其局限?
 (1)常用来跳出死循坏;
 (2)在linux开发中,常用于打印错误;
 (3)goto在某些使用场合会破坏程序的栈逻辑,有一定的局限性。
2、嵌入式开发中常说的“字节对齐”是什么?
 嵌入式开发中常用到的结构体,我们通常用#pragma pack(n),n为2的整数幂来指定对齐方式。
3、堆和栈的区别是什么?
 (1)栈的空间是系统自动分配和回收,
 堆的空间是用户手动分配回收( malloc,calloc,realloc,free)
 (2)栈的空间较小,堆的空间较大
 (3)栈的地址空间往地址向下增长,堆的地址空间是由低地址到高地址
 (4)栈的存储效率更高
4、使用递归函数易引发什么问题?
 (1)递归次数过多,会影响执行效率
 (2)递归次数过多,栈区的内存分配有限,易出现栈溢出
5、sizeof()与strlen()的区别是什么?
 (1)sizeof是计算能容纳实现所建立的最大对象的字节大小的运算符,参数可以是数组、指针、结构体类型、函数等;
 (2)strlen是是返回字符串的长度的功能函数,其参数必须是(char*)字符型指针。
6、谈谈static关键字的作用?
 一般嵌入式软件开发的本文件的函数要全部使用static关键字声明,这样是一个好的编程规范。
 静态全局变量仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者互不影响。
 静态局部变量在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。
6、谈谈const关键字的作用?
 (1)在变量初次定义时赋初,并用关键字const修饰,使变量只可访问,不能重新赋值修改变量;
 (2)指针变量指向的位置不能被修改。定义时,被 const 修饰的指针变量指针只能在定义时初始化,不能定义之后重新指向新的数据。
 (3)修饰的指针变量指向的变量的值不能被修改,但是该指针可以指向其它空间。
 (4)指针变量指向的位置不能被修改,并且指针变量指向变量的值也不能被修改。
 (5)函数形参可以利用const关键字进行限制,来防止在函数内部修改指针指向的数据。
6、谈谈volatile关键字的作用?
 (1)裸机编程时,某变量是指向寄存器中某一特定地址,添加volatile的变量不进行优化处理;
 (2)在多线程中修饰共享全局变量和某函数与中断函数共享全局变量时,加上volatile,让编译器不要省略该变量的访问;
7、内存泄漏和内存溢出是指的什么?
 (1)内存溢出是指程序申请内存时,没有足够的内存供申请者使用。
 (2)内存泄漏是指程序在申请内存后,无法释放已申请的内存空间。
 内存泄漏堆积后就会造成内存溢出。
8、简要写一下嵌入式的内存布局?
 栈(stack):含有环境变量、命令行参数、局部变量
 堆(heap):通常由molloc()、calloc()分配内存,realloc()、free()释放内存。
 数据段:
 .bss段:未初始化的静态数据
 .data段:已初始化的静态数据
 .rodata段:常量
 代码段:
 .text:用户代码
 .init段:系统初始化代码
