
C/C++
朱有鹏老师
朱有鹏,先后从事电子工程师、单片机软件工程师、嵌入式linux软件工程师、物联网软件工程师、架构师等工作,朱老师物联网大讲堂创始人,畅销书作者。擅长U-Boot、linux kernel等嵌入式底层和系统层开发、架构设计。擅长汇编、C/C++、Java、C#等常用开发语言,2015年起录制的在线视频课程《朱有鹏老师嵌入式linux核心课程》累计学习人数超300万。2016年与IBM合作制作基于IBM Waston平台的物联网系统开发教程,授予“IBM技术专家”。2018年开始与华为认证合作,开发HCDP-IoT相关的课程体系、视频课程、实验平台、案例等,被授予“华为云享专家”。
展开
-
堆栈和变量的分配区域
转载自 http://mengren425.blog.163.com/blog/static/56903931200791003721118/ 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员转载 2012-10-30 15:18:12 · 984 阅读 · 0 评论 -
container_of 详解
// container_of宏的功能:从结构体类型(type)的一个成员(member)指针(ptr),反推得到该结构体的指针 // 其实现由两个分号隔开的语句组成,首先用typeof关键字,得到member成员的类型typeof(member),为了访问 // member使用了((type *)0)->member,得到该类型后声明了一个该类型的指针__mptr,这是一个中间变量。 /原创 2012-12-02 14:37:03 · 1814 阅读 · 0 评论 -
printf函数的几点说明
printf函数可能大多数人都用过,但是我们一般都不会详细全面的研究它的诸多格式。今天有空做了一些测试,记录如下: 测试环境:VMware+Ubuntu10.04 (gcc v4.4.3) 1、函数代码如下: int main(int argc, char **argv) { int a = 1234; int b = 0x5678; p原创 2012-12-13 21:36:34 · 1941 阅读 · 2 评论 -
gcc之inline函数探究
1、引子:内联函数(以下称为inline函数)的行为类似于宏,但是会像函数一样进行参数的静态类型检查。因此gcc中很多地方倾向于使用inline函数来替代宏。但是inline函数在gcc中应该如何使用呢?函数被内联之后究竟有哪些改变呢? #include "stdio.h" //inline int func(int a) __attribute__((always_inline)); //原创 2013-01-23 17:43:26 · 6497 阅读 · 2 评论 -
结构体之offsetof宏详细解析
1、#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE*)0)->MEMBER) (include/linux/stddef.h) 1.1 功能: 返回结构体TYPE中MEMBER成员相对于结构体首地址的偏移量,以字节为单位。 1.2 解析: 此类复杂表达式的解析应该采用从内向外、逐层理解的方式。 首先,(TYPE *)0表示将数字0原创 2013-01-15 11:36:28 · 3816 阅读 · 2 评论 -
C For Linux之内存访问-内存简介
1、 内存 1.1、 计算机为什么需要内存 存储器是计算机系统中非常重要的组成部分。计算机中的存储器分为两类:内存储器的外存储器(也叫辅助存储器)。 所谓外存储器在PC机中一般指硬盘、U盘、光盘等,而在嵌入式系统中一般使用nandflash、SDCard等基于flash技术的存储器。他的优点是容量大、单位存储成本低、掉电不丢失。缺点是读写速度慢(这个慢是相对于CPU的速度来原创 2013-01-17 14:31:27 · 4686 阅读 · 0 评论