随笔分类 - 嵌入式100题
嵌入式100题,题目为网上搜索,答案来源为个人总结以及网上搜索。主要为了总结自己的知识点,以及增加自己对知识点的掌握。
摘要:volatile作用和用法 使用volatile关键字声明的变量或对象通常具有与优化、多线程相关的特殊属性。通常,volatile关键字用来阻止(伪)编译器认为的无法“被代码本身”改变的代码(变量/对象)进行优化。如在C语言中,volatile关键字可以用来提醒编译器它后面所定义的变量随时有可能改变
阅读全文
摘要:const常量和#define的区别(编译阶段、安全性、内存占用等) 区别: 就起作用的阶段而言:#define是在编译的预处理阶段起作用,而const是在编译、运行的时候起作用。 就起作用的方式而言:#define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可
阅读全文
摘要:static的用法(定义和用途) 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。 那
阅读全文
摘要:char和int之间的转换 Char转int: Char与int的相互转换,联想ASCII码,字符’0’对应的值为48,所以不能直接加减’’; Char ch = ’9’; int ch_int = ch – ’0’; //此时ch_int = 9; int转char: int i= 9; char
阅读全文
摘要:struct和class的区别 class是引用类型,struct是值类型; class可以继承类、接口和被继承,struct只能继承接口,不能被继承; class有默认的无参构造函数,有析构函数,struct没有默认的无参构造函数,且只能声明有参的构造函数,没有析构函数; class可以使用abs
阅读全文
摘要:数组到底存放在哪里 数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。下面将深入介绍数组在内存中的运行机制。 数组引用变量只是一个引用,这个引用变量可以指向任何有效的内存,只有当该引用指向有效内存后,才可通过该数组变量来访问数组元素。 与所有引用变量相同的是,
阅读全文
摘要:重写memcpy()函数需要注意哪些问题 标准memcpy()的解释: void *memcpy(void *dst, const void *src, size_t n); //If copying takes place between objects that overlap, the beh
阅读全文
摘要:函数参数压栈顺序,即关于__stdcall和__cdecl调用方式的理解 __stdcall和__cdecl都是函数调用约定关键字。 __stdcall:参数由右向左压入堆栈;堆栈由函数本身清理。 __cdecl:参数也是由右向左压入堆栈;但堆栈由调用者清理。
阅读全文
摘要:函数头文件的声明前加extern 与不加extern 有什么区别 声明时加不加extern无所谓,没区别,因为函数默认是extern属性。 在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用。
阅读全文
摘要:extern”C” 的作用 extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言(而不是C++)的方式进行编译。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函
阅读全文
摘要:C语言检索内存情况 内存分配的方式 内存分配方式: 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置
阅读全文
摘要:指针与引用的相同和区别;如何相互转换? 相同: 都是地址的概念,指针指向某一内存、它的内容是所指内存的地址;引用则是某块内存的别名。 从内存分配上看:两者都占内存,程序为指针会分配内存,一般是4个字节;而引用的本质是指针常量,指向对象不能变,但指向对象的值可以变。两者都是地址概念,所以本身都会占用内
阅读全文
摘要:在1G内存的计算机中能否malloc(1.2G)?为什么? malloc能够申请的空间大小与物理内存的大小没有直接关系,仅与程序的虚拟地址空间相关。程序运行时,堆空间只是程序向操作系统申请划出来的一大块虚拟地址空间。应用程序通过malloc申请空间,得到的是在虚拟地址空间中的地址,之后程序运行所提供
阅读全文
摘要:malloc的底层实现 使用过c语言的都知道malloc是一个动态分配内存的函数,还可以通过free释放内存空间。如果我们想分析一下malloc的源码,这其实不是一会就能看懂的,但是我们可以讨论一下malloc的简单实现。在这之前,我们先来看一下虚拟内存空间。虚拟内存空间是操作系统实现内存管理的一种
阅读全文
摘要:new和malloc的区别 new是操作符,而malloc是函数。 new在调用的时候先分配内存,在调用构造函数,释放的时候调用析构函数。 new是类型安全的,malloc返回void*。 new可以被重载。 new分配内存更直接和安全。 malloc 可以被realloc。 new发生错误抛出异常
阅读全文
摘要:正确处理僵尸进程的方法 子进程退出时向父进程发送SIGCHILD信号,父进程处理SIGCHILD信号。在信号处理函数中调用wait进行处理僵尸进程。 fork两次,父进程fork一个子进程,然后继续工作,子进程fork一个孙进程后退出,那么孙进程被init接管,孙进程结束后,init会回收。不过子进
阅读全文
摘要:如何创建守护进程 调用fork(),创建新进程,它会是将来的守护进程。 在父进程中调用exit,保证子进程不是进程组长。 调用setsid()创建新的会话区。 将当前目录改成跟目录(如果把当前目录作为守护进程的目录,当前目录不能被卸载他作为守护进程的工作目录)。 将标准输入,标注输出,标准错误重定向
阅读全文
摘要:孤儿进程、僵尸进程、守护进程的概念 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程所收养,并由init进程对它们完成状态收集工作。僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取
阅读全文
摘要:并发,同步,互斥,异步,阻塞,非阻塞的理解 并发(concurrency):在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥。 同步(synchronous):线程之间的关系不是相互排斥临界资源的关系,而是
阅读全文
摘要:线程同步与阻塞的关系?同步一定阻塞吗?阻塞一定同步吗? 同步是个过程,阻塞是线程的一种状态。多个线程操作共享变量时可能会出现竞争。这时需要同步来防止两个以上的线程同时进入临界区,在这个过程中,后进入临界区的线程将阻塞,等待先进入的线程走出临界区。线程同步不一定发生阻塞,线程同步的时候,需要协调推进速
阅读全文
浙公网安备 33010602011771号