某些系统库(例如 malloc strlen)需要或返回 size_t 作为参数。
在LLVM级别,size_t不存在。 它是为了开发人员的利益而构建的,被类型定义为本机类型。 本机类型对于目标体系结构具有固定大小,这就是编译器在 LLVM 位代码中表示它们的方式。 因此,在 x86 上,size_t 可能会被前端视为 unsigned long,然后将其作为 i32 写入 LLVM(因为 LLVM 程序集没有无符号类型)。
size_t
是一个整数类型,其位宽足以寻址目标的可寻址内存,您可以为 size_t
定义一个有用的、依赖于目标的代理,如下所示。
Type * sizeTType(Module & M) {
DataLayout &DL = M.getDataLayout();
unsigned PointerSize = DL.getPointerSizeInBits();
return Type::getIntNTy(M.getContext(), PointerSize);
}
您可以在 llvm 中使用
size_t
,它是正常使用的有效类型。