如何获取CPU一级缓存(主缓存)信息?

2024-04-03

我尝试使用 WMI 获取 CPU 缓存信息,效果很好,但仅适用于 2 级和 3 级缓存,所以我的问题是,如何获取 CPU 1 级缓存信息?


这是WinAPI方式,它使用GetLogicalProcessorInformation http://msdn.microsoft.com/en-us/library/windows/desktop/ms683194%28v=vs.85%29.aspx功能。如果您至少有 Delphi XE2,则不需要以下定义,它们已经在Windows unit:

type
  TLogicalProcessorRelationship = (
    RelationProcessorCore = 0,
    RelationNumaNode = 1,
    RelationCache = 2,
    RelationProcessorPackage = 3,
    RelationGroup = 4,
    RelationAll = $FFFF
  );
  TProcessorCacheType = (
    CacheUnified,
    CacheInstruction,
    CacheData,
    CacheTrace
  );
  TCacheDescriptor = record
    Level: Byte;
    Associativity: Byte;
    LineSize: Word;
    Size: DWORD;
    pcType: TProcessorCacheType;
  end;
  PSystemLogicalProcessorInformation = ^TSystemLogicalProcessorInformation;
  TSystemLogicalProcessorInformation = record
    ProcessorMask: ULONG_PTR;
    Relationship: TLogicalProcessorRelationship;
    case Integer of
      0: (Flags: Byte);
      1: (NodeNumber: DWORD);
      2: (Cache: TCacheDescriptor);
      3: (Reserved: array [0..1] of ULONGLONG);
  end;

function GetLogicalProcessorInformation(
  Buffer: PSystemLogicalProcessorInformation;
  var ReturnLength: DWORD): BOOL; stdcall;
  external kernel32 name 'GetLogicalProcessorInformation';

以及如何显示所有 1 级缓存条目的缓存类型、级别和大小的示例:

procedure TForm1.Button1Click(Sender: TObject);
var
  S: string;
  I: Integer;
  ReturnLength: DWORD;
  Buffer: array of TSystemLogicalProcessorInformation;
begin
  SetLength(Buffer, 1);
  if not GetLogicalProcessorInformation(@Buffer[0], ReturnLength) then
  begin
    if GetLastError = ERROR_INSUFFICIENT_BUFFER then
    begin
      SetLength(Buffer, 
        ReturnLength div SizeOf(TSystemLogicalProcessorInformation) + 1);
      if not GetLogicalProcessorInformation(@Buffer[0], ReturnLength) then
        RaiseLastOSError;
    end
    else
      RaiseLastOSError;
  end;

  for I := 0 to High(Buffer) do
  begin
    if (Buffer[I].Relationship = RelationCache) and
      (Buffer[I].Cache.Level = 1) then
    begin
      S := 'Type: ';
      case Buffer[I].Cache.pcType of
        CacheUnified: S := S + 'Unified cache';
        CacheInstruction: S := S + 'Instruction cache';
        CacheData: S := S + 'Data cache';
        CacheTrace: S := S + 'Trace cache';
      end;
      S := S + sLineBreak;
      S := S + 'Level: ' + IntToStr(Buffer[I].Cache.Level) + sLineBreak;
      S := S + 'Size: ' + IntToStr(Buffer[I].Cache.Size) + ' B';
      ShowMessage(S);
    end;
  end;
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取CPU一级缓存(主缓存)信息? 的相关文章

随机推荐

  • “jQuery 方式”仅用 HTML 和文本的混合替换文本节点?

    在我的 Web 浏览器用户脚本项目中 我只需要替换一个文本节点 而不影响与文本位于同一父节点下的其他 HTML 元素 我需要用多个节点替换它 div foo bar baz img src image png div 需要成为 div a
  • Github Mac 权限问题

    作为新的 Git 用户 我正在使用最新的 Mac 版 Github 当我尝试同步存储库 我首先克隆 然后创建一个新分支 提交更改 然后与 master 合并 时 我收到错误 Authentication Failed You may not
  • 浏览器不会通过 onclick 事件设置 cookie

    尽管我确信这是显而易见的事情 但我还是对这个错误感到恼火 如果是的话 抱歉 以下 JavaScript 成功设置了我的 cookie 但是一旦我将相同的代码绑定到onclick事件 就像这样
  • 这个递归同步调用如何不死锁?

    我有一组方法 它们全部同步到类对象 不能使用 self 因为可以在多个线程中使用该对象的多个实例 其中一些方法调用类中也在类对象上同步的其他方法 不知怎的 这有效并且不会导致我期望的僵局 我假设 testA 将被阻止运行 因为 testB
  • if (设备 == iPad), if (设备 == iPhone)

    所以我有一个通用应用程序 我正在设置一个内容的大小UIScrollView 显然 iPhone 和 iPad 上的内容大小会有所不同 如何为 iPad 设置特定尺寸 为 iPhone 和 iPod touch 设置另一个尺寸 if UI U
  • 解析 SQL 语句的库

    我希望能够解析任意 SQL SELECT 语句并检索各个组成部分 列 关系 JOIN 条件 WHERE 条件 ORDER BY 列 最好使用 Delphi 快速谷歌搜索显示了几种不同的免费软件产品 但尚不清楚它们是否完整和 或正在积极开发中
  • 纬度值无效:必须介于 -90 到 90 之间

    我尝试在我的phonegap应用程序中通过javascript Azure Map创建地图 但出现以下错误 atlas min js api version 1 0 362 未捕获 承诺 错误 无效的 LngLat 纬度值 必须介于 90
  • 如何在 css 动画末尾使用 display:none

    我想在关键帧动画的末尾添加一个 display none 属性 就像这样 sw intro animation introtop animation duration 0 8s animation delay 2s animation fi
  • Python 中的日期差异(以分钟为单位)

    如何计算Python中以下时间戳的时间差 以分钟为单位 2010 01 01 17 31 22 2010 01 03 17 31 22 minutes diff datetime end datetime start total secon
  • SwiftUI Plain List 如何删除 iOS16 中的顶部标题填充

    我正在寻找一种方法来删除 SwiftUI 列表中的顶部填充 借助 iOS 15 我们可以做到UITableView appearance sectionHeaderTopPadding 0 然而 在 iOS 16 中 List 已通过 UI
  • 具有代理 Lambda 的 AWS API Gateway:Lambda 函数的权限无效

    I am using AWS API Gateway with a proxy Lambda when the name of the lambda function is coming as a stage variable Meanin
  • PHP、HTML、Javascript 执行顺序

    我有一个 test php 文件 该文件包含一些 PHP 代码 HTML 元素以及一些内部 JavaScript 和一些外部 JavaScript 我想知道哪个首先加载或执行 PHP HTML 还是 JavaScript 我想知道执行顺序
  • 单元格的内容应占据所有行而不改变列宽

    我想要一张不标准的桌子 它应该是这样的 这是我的demo http jsbin com kegogabine edit html output 正如您所看到的 第一列的宽度因文本而增加 但我不希望出现这种行为 我希望文本从左到右整行 更新
  • 将两个 UIImage 合并为 1 个以保存到库

    我想知道如何将 2 个 uiimage 合并为 1 个 我想将最终产品保存到图书馆 为了保存图像 我使用了 UI 按钮 这是我如何保存 UIImageview image 的片段 IBAction getPhoto id sender UI
  • vert.x 有集中过滤吗?

    我是 Vert X 的新手 Vert x 是否有内置的集中式过滤器 我的意思是您将在 J2EE 应用程序上使用的过滤器类型 例如 所有页面都必须经过身份验证过滤器或类似的操作 在 Vert x 中是否有标准化的方法来实现这一目标 我知道这个
  • 有索引的搜索时间 > 无索引的搜索时间

    我有一个集合 numbers 其中包含 200000 个文档对象 其中 number i i 1 到 200000 没有任何索引 gt 10000 给出 nscanned 200000 和 115 ms 对于数字 gt 10000 的索引给
  • 在 PHP 中将时区偏移量转换为友好名称

    我正在尝试使用 PHP 将 RFC 时间戳转换为友好的日期 这是例子 Wed 17 Feb 2010 19 44 01 0500 我希望将其打印为 Wed 17 Feb 2010 19 44 01 EST 使用 date strtotime
  • 为什么 :before 和 :after 伪元素需要 'content' 属性?

    鉴于以下情况 为什么 after选择器需要内容属性才能运行吗 test width 20px height 20px background blue position relative test after width 20px heigh
  • 利用 JQuery find 或 inArray 方法查找数组中的项目

    我想知道是否有人知道使用 JQuery find 方法或 inArray 方法来查找数组中的项目的方法 我似乎在文档中找不到任何内容 例如 var items id 1 name bob id 2 name joe id 3 name be
  • 如何获取CPU一级缓存(主缓存)信息?

    我尝试使用 WMI 获取 CPU 缓存信息 效果很好 但仅适用于 2 级和 3 级缓存 所以我的问题是 如何获取 CPU 1 级缓存信息 这是WinAPI方式 它使用GetLogicalProcessorInformation http m