Class: AdLint::Cc1::MemoryPool
- Inherits:
-
Object
- Object
- AdLint::Cc1::MemoryPool
- Defined in:
- lib/adlint/cc1/object.rb
Instance Method Summary collapse
- #allocate_dynamic(byte_size) ⇒ Object
- #allocate_static(byte_size) ⇒ Object
- #free(mem_block) ⇒ Object
-
#initialize ⇒ MemoryPool
constructor
A new instance of MemoryPool.
- #lookup(addr) ⇒ Object
Constructor Details
#initialize ⇒ MemoryPool
Returns a new instance of MemoryPool.
1316 1317 1318 1319 1320 1321 |
# File 'lib/adlint/cc1/object.rb', line 1316 def initialize @memory_blocks = {} @address_ranges = [] # NOTE: To make room for NULL and controlling expressions. @free_address = 10 end |
Instance Method Details
#allocate_dynamic(byte_size) ⇒ Object
1331 1332 1333 1334 1335 1336 1337 |
# File 'lib/adlint/cc1/object.rb', line 1331 def allocate_dynamic(byte_size) mem_block = DynamicMemoryBlock.new(@free_address, byte_size) @free_address += allocating_byte_size(byte_size) @memory_blocks[mem_block.address] = mem_block @address_ranges.push(mem_block.address...@free_address) mem_block end |
#allocate_static(byte_size) ⇒ Object
1323 1324 1325 1326 1327 1328 1329 |
# File 'lib/adlint/cc1/object.rb', line 1323 def allocate_static(byte_size) mem_block = StaticMemoryBlock.new(@free_address, byte_size) @free_address += allocating_byte_size(byte_size) @memory_blocks[mem_block.address] = mem_block @address_ranges.push(mem_block.address...@free_address) mem_block end |
#free(mem_block) ⇒ Object
1339 1340 1341 1342 |
# File 'lib/adlint/cc1/object.rb', line 1339 def free(mem_block) @memory_blocks.delete(mem_block.address) @address_ranges.reject! { |range| range.include?(mem_block.address) } end |
#lookup(addr) ⇒ Object
1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 |
# File 'lib/adlint/cc1/object.rb', line 1344 def lookup(addr) if mem_block = @memory_blocks[addr] return mem_block else if addr_range = @address_ranges.find { |r| r.include?(addr) } mem_block = @memory_blocks[addr_range.first] return mem_block.windows.find { |w| w.address == addr } end end nil end |