它相当于llvm中的size_t

问题描述 投票:0回答:3

某些系统库(例如 malloc strlen)需要或返回 size_t 作为参数。

  • LLVM IR 中与这些函数交互的正确选择是什么?
  • 选择是编译器的任务吗?
  • LLVM IR 有 size_t 类型吗?
c llvm size-t
3个回答
14
投票

在LLVM级别,size_t不存在。 它是为了开发人员的利益而构建的,被类型定义为本机类型。 本机类型对于目标体系结构具有固定大小,这就是编译器在 LLVM 位代码中表示它们的方式。 因此,在 x86 上,size_t 可能会被前端视为 unsigned long,然后将其作为 i32 写入 LLVM(因为 LLVM 程序集没有无符号类型)。


0
投票

size_t
是一个整数类型,其位宽足以寻址目标的可寻址内存,您可以为
size_t
定义一个有用的、依赖于目标的代理,如下所示。

Type * sizeTType(Module & M) {
  DataLayout &DL = M.getDataLayout();
  unsigned PointerSize = DL.getPointerSizeInBits();
  return Type::getIntNTy(M.getContext(), PointerSize);
}

-5
投票

您可以在 llvm 中使用

size_t
,它是正常使用的有效类型。

© www.soinside.com 2019 - 2024. All rights reserved.