Nouveau源码分析(二):Nouveau结构体的基本框架

本文深入探讨Nouveau源码,重点解析其如何通过模拟继承和虚拟函数来构建C++类似的结构。文章首先介绍模拟继承的概念,展示了相关代码示例,接着讲解了如何实现模拟虚拟函数,以及如何利用标识符获取oclass来实现对不同设备模块的统一访问。尽管Nouveau代码中还存在parent关系,但本文主要聚焦于继承和虚拟函数的模拟实现。
摘要由CSDN通过智能技术生成

Nouveau源码分析(二)

在讨论Nouveau对Nvidia设备的初始化前,我准备先说一下Nouveau结构体的基本框架

Nouveau的很多结构体都可以看作是C++中的类,之间有很多相似的东西,比如继承关系,virtual成员函数等.

模拟继承

先尝试阅读一下这个代码:

#include <stdlib.h>

struct abc
{
   int a;
   int b;
   int c;
};

struct def
{
   struct abc base;
   int d;
   int e;
   int f;
};

#define abc_create(a,b,c,pabc) \
   abc_create_(a,b,c,sizeof(**pabc),(void **)pabc)

int abc_create_(int a,int b,int c,
                 size_t size,void **pabc)
{
   struct abc *abc_ = (struct abc *)malloc(size); //按传入的size分配空间

   abc_->a = a;
   abc_->b = b;
   abc_->c = c; //初始化自身

   *pabc = abc_;
   return 0;
}

#define def_create(a,b,c,d,e,f,pdef) \
   def_create_(a,b,c,d,e,f,sizeof(**pdef),(void **)pdef) //获得实际应分配空间大小

int def_create_(int a,int b,int c,int d,int e,int f,
                 size_t size,void **pdef)
{
   struct def *def_;
   abc_create_(a,b
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值