博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《内存对齐与回调函数参数》
阅读量:4325 次
发布时间:2019-06-06

本文共 1627 字,大约阅读时间需要 5 分钟。

在C++中,有时候当使用函数指针做回调的时候,函数的参数需要一并传入,而函数的各个参数可能就要保证内存对齐,使得在读取使用的时候能够读到正确的数据;

比如在VS里面针对各个版本的工程中,可以定义宏:

#defined PLATFORM_WIN32 || defined PLATFORM_NN_WIN#define ALIGN_PC( bytes ) __declspec(align(bytes))#define ALIGN_PS3( bytes )#define ALIGN_X360( bytes )#define ALIGN_NX( bytes )#endif

而一个class的成员变量存储函数回调指针和参数:

ALIGN_PC(16) ALIGN_NX(16) ALIGN_X360(16) uint8_t m_Param[ PARAM_SIZE ] ALIGN_PS3( 16 );TaskFunction * m_Function;

其中:

typedef unsigned char uint8_t;

在调用的时候,形式即可以为:

bool res = m_Function( this->m_Param );

而具体关于函数指针的类型相关的定义可以为:

typedef bool TaskFunction( const void* a_Param );#if defined(ENABLE_PIX) || (defined(USE_NEW_WORKER_THREADS) && defined(NEW_WORKER_THREADS_DEBUG))//some macrostruct TaskFunctionParameterStruct{    TaskFunctionParameterStruct( TaskFunction* a_Function, const char * a_Name  )        : m_Function( a_Function )        , m_Name( a_Name )    {    }        operator TaskFunction* () const    {        return m_Function;    }    mutable TaskFunction* m_Function;        mutable const char* m_Name;    };#define TASK_FUNCTION( F ) TaskFunctionParameterStruct( F, #F )typedef const TaskFunctionParameterStruct& TaskFunctionParameter;#else#define TASK_FUNCTION( F ) Ftypedef TaskFunction* TaskFunctionParameter;#endif//then://assign function pointer codebool xxx::UpdateFunctionCallBack(const void* a_UserData){    return false;}TaskFunctionParameter a_Funcion = UpdateFunctionCallBack;m_Function = a_Function;m_Param = &structParamter;//can store one struct pointer, this struct store the paramters

 

posted on
2017-06-27 20:36  阅读(
...) 评论(
...) 收藏

转载于:https://www.cnblogs.com/DeanWang/p/7087020.html

你可能感兴趣的文章
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_42、SpringBoot常用定时任务配置实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_44、新日志框架LogBack介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_41、SpringBoot定时任务schedule讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_43、SpringBoot2.x异步任务实战(核心知识)...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_45、SpringBoot2.x日志讲解和Logback配置实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_02技术选型
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_汇总
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_01传统架构演进到分布式架构
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_02 微服务核心基础讲解
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_03常见的微服务框架
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_04微服务下电商项目基础模块设计...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-01 什么是微服务的注册中心
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-02CAP理论知识
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-03CAP原理、常见面试题
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-04 SpringCloud微服务核心组件Eureka介绍和闭源后影响...
查看>>