in src/oclfpga/oclfpga_device.cc [157:175]
focl_mem_off_t OCLFPGADevice::alloc(size_t size) {
auto iter = _mem_chunks.begin();
size_t aligned_size = ((size + _alignment - 1) / _alignment) * _alignment;
while (iter != _mem_chunks.end() && (iter->occupied || (iter->size < aligned_size))) {
iter++;
}
if (iter == _mem_chunks.end()) return FOCL_MEM_OFF_ERR;
iter->occupied = true;
if (iter->size != aligned_size) {
mem_chunk_t rem = {iter->offset + aligned_size, iter->size - aligned_size, false};
iter->size = aligned_size;
_mem_chunks.insert(std::next(iter), rem);
}
return iter->offset;
}