llvm内存分配

本文深入探讨了LLVM内存分配的实现细节,它避免直接使用malloc/new,而是通过malloc获取内存并记录在vector中,以确保内存地址对齐。内存可以被多个对象复用,对象通过new(地址)构造函数创建,销毁时不立即释放,旨在优化内存对齐以满足特定需求。在内存不足时,会进行重新分配并记录新内存块。
摘要由CSDN通过智能技术生成

下面是llvm分配内存的源码,总结一下来说llvm给一些对象分配内存,不直接采用malloc,new分配内存。而是通过malloc分配一块内存,这块内存先不用,获取这块内存的地址,并记录这块内存的地址,为了之后好释放,记录的方式是把内存的地址放进一个vector里面,释放的时候遍历vector就可以,这块内存并不总是给一个对象使用,可以给多个对象使用,创建对象的方式是new(地址)构造函数。销毁对象的时候会回收内存但不直接释放内存,也就是一块内存可以被多次使用。llvm这样做的目的可能是为了使得每次分配的内存地址都能对齐。因为有些地方需要内存地址必须是对齐的内存地址。比如说某个内存地址(A)只有前30位有效,如果内存地址是以4为单位对齐的话,那么A就能被正确的使用。


size是分配的内存大小,Alignment是内存对齐数,也就是说内存地址必须是Alignment的倍数

void * Allocate(size_t Size, size_t Alignment) {

    assert(Alignment > 0 && "0-byte alignnment is not allowed. Use 1 instead.");


    // Keep track of how many bytes we've allocated.
    BytesAllocated += Size;

    调整量   比如CurPtr是7,Alignment是4,则alignmentAdjustment返回1,因为7+1后是4的倍数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值