下面是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的倍数