单个文件实现cpu的信息检测:ruapu.h的学习笔记

这篇文章介绍了GitHub上的ruapu项目,一个由nihui开发的单文件库,用于检测CPU的指令集支持。文章详细描述了ruapu.h中的初始化函数ruapu_init和检测函数ruapu_supports的使用,以及在不同平台上的实现细节,包括Windows、Android、Linux和macOS的特性和兼容性处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ruapu.h的使用

  • "ruapu.h"主要提供了两个函数 ruapu_init 和 ruapu_supports,分别用于初始化和检测指令集支持。
// 使用示例见:https://github1s.com/nihui/ruapu/blob/master/main.c#L14-L16
void ruapu_init();
int ruapu_supports(const char* isa);

使用方式

#define RUAPU_IMPLEMENTATION
#include "ruapu.h"
  • 需要加上 #define RUAPU_IMPLEMENTATION是因为"ruapu.h"的结构如下(一般来说头文件只包含声明,所以要这样处理)
#ifndef RUAPU_H
#define RUAPU_H

void ruapu_init();
int ruapu_supports(const char* isa);

#ifdef RUAPU_IMPLEMENTATION
  // 两个函数的实现
#endif // RUAPU_IMPLEMENTATION

实现部分

#include <setjmp.h>
#include <string.h>

Windows 平台的ruapu_detect_isa()实现

#if defined _WIN32
#include <windows.h>

#if WINAPI_FAMILY == WINAPI_FAMILY_APP
// uwp does not support veh :(   UWP平台不支持VEH(Vectored Exception Handling)
#if defined (_MSC_VER)
#pragma message("warning: ruapu does not support UWP yet.")
#else
#warning ruapu does not support UWP yet.
#endif
static int ruapu_detect_isa(const void* some_inst)// 该函数总是返回0
{
   
   
    (void)some_inst;
    return 0;
}
#else // WINAPI_FAMILY == WINAPI_FAMILY_APP
// 如果不是UWP平台,这里放置非UWP平台的ruapu_detect_isa()实现
#endif // WINAPI_FAMILY == WINAPI_FAMILY_APP

Android、Linux、和 macOS 平台的ruapu_detect_isa()实现


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值