#include <stdio.h>
#include <stdlib.h> /* 计算成员变量首部相对于结构变量首部的偏移量 */
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) /**
* 通过结构体中成员变量的首地址找到这个结构体变量的首地址
* @ptr: 成员变量的首地址
* @type: 结构体类型
* @member: 成员变量的名字
*/
#define container_of(ptr, type, member) ({ \
const typeof( ((type *))->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );}) typedef struct Person
{
char name[];
int hight;
int weight;
} Person; int main()
{
Person test = {"tongyishu", , };
Person* _test = container_of(&(test.hight), Person, hight);
printf("age : %d\n", _test->weight); //结果为 60
return ;
}

container_of机制的更多相关文章

  1. linux内核级同步机制--futex

    在面试中关于多线程同步,你必须要思考的问题 一文中,我们知道glibc的pthread_cond_timedwait底层是用linux futex机制实现的. 理想的同步机制应该是没有锁冲突时在用户态 ...

  2. Linux 内核进程管理之进程ID

    Linux 内核使用 task_struct 数据结构来关联所有与进程有关的数据和结构,Linux 内核所有涉及到进程和程序的所有算法都是围绕该数据结构建立的,是内核中最重要的数据结构之一.该数据结构 ...

  3. 基数树与RCU锁

    基数树是一种用空间换时间的数据结构,通过空间的冗余减少时间上的消耗.radix tree很适合稀疏的结构! 自从把RCU机制引入到基树中来,这里就有了个协议叫做:lockless的page-cache ...

  4. Non Lasting Storage File System、procfs、sysfs

    catalog . 引言 . proc文件系统 . 简单的文件系统 . sysfs 0. 引言 传统上,文件系统用于在块设备上持久存储数据,但也可以使用文件系统来组织.提供.交换并不存储在块设备上的信 ...

  5. Linux Kernel Synchronization && Mutual Exclusion、Linux Kernel Lock Mechanism Summarize

    目录 . 内核锁机制 . 同步与互斥 . 锁定内存总线原子操作 . 信号量 . 自旋锁 . RCU机制 . PERCPU变量 . 内存和优化屏障 . 读者/写者锁 . 大内核锁 . 互斥量 1. 内核 ...

  6. Linux 内核进程管理之进程ID 。图解

    http://www.cnblogs.com/hazir/tag/kernel/ Linux 内核进程管理之进程ID   Linux 内核使用 task_struct 数据结构来关联所有与进程有关的数 ...

  7. cgroup原理简析:vfs文件系统

    要了解cgroup实现原理,必须先了解下vfs(虚拟文件系统).因为cgroup通过vfs向用户层提供接口,用户层通过挂载,创建目录,读写文件的方式与cgroup交互.因为是介绍cgroup的文章,因 ...

  8. Linux内核入门到放弃-网络-《深入Linux内核架构》笔记

    网络命名空间 struct net { atomic_t count; /* To decided when the network * namespace should be freed. */ a ...

  9. Linux进程ID号--Linux进程的管理与调度(三)【转】

    Linux 内核使用 task_struct 数据结构来关联所有与进程有关的数据和结构,Linux 内核所有涉及到进程和程序的所有算法都是围绕该数据结构建立的,是内核中最重要的数据结构之一. 该数据结 ...

随机推荐

  1. OpenCL32 for mingw

    OpenCL32 for MinGW 最新版本 2019.05.25 从 CUDA_Toolkit_10.1.168_425.25_win10 中提取的头文件和库文件: 链接: https://pan ...

  2. JavaScript 积累

    1. 基本类型值在内存中占据固定大小的空间,因此被保存在栈空间中: 2. 引用类型的值是对象,保存在堆空间中: 3. 从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本:从一个变量向另一个 ...

  3. JavaScript编程精解 初读笔记

    1.1 值 JavaScript里有6种基本类型的值: number.string.Boolean.object.function和undefined. 1.3.2 prompt和confirm 浏览 ...

  4. 查询sq字段逗号分隔的方式

    2,3,4 -- select * from t_qs_anlycomagingconfig twhere and ( to_char(','||t.valid_month||',') like '% ...

  5. WinForm和WPF中注册热键

    由于.Net没有提供专门的类库处理热键,所以需要直接调用windows API来解决. HotKey为.NET调用Windows API的封装代码,主要是RegisterHotKey和Unregist ...

  6. GET 和 POST 区别?网上多数答案都是错的!

    最近在看<HTTP权威指南>这本书,对HTTP协议有了更深一层的了解. 在我们面试过程中关于HTTP协议有两个经典的面试题: 1. 谈谈HTTP中GET与POST的区别. 2. 在浏览器中 ...

  7. 向tabcontrol中添加form

    昨天花了一天的时间去找一个错误,关系是这样的,我添加一个tabcontrol就叫tc1好了,然后在tc1中再动态添加一个父窗体l叫form1,要把form1添加进tabcontrol就要先新建一个ta ...

  8. springboot基于方法级别注解事务的多数据源切换问题

    springBoot多数据源配置 配置读数据源 @Component @ConfigurationProperties(prefix = "jdbc.read") @Propert ...

  9. UML(统一建模语言)包含9种图

    UML分为静态图.动态图 动态图:虚壮活血 () 静态图:租用配对累()

  10. 小记-------linux scp 远程拷贝命令

    //phoenix-4.10.0-HBase-1.2-server.jar  要拷贝的文件或文件夹 //root  当前用户   //192.148.21.1 远程机器路径, 也可以是域名. // $ ...