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.
1325 1326 1327 1328 1329 1330 |
# File 'lib/adlint/cc1/object.rb', line 1325 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
1340 1341 1342 1343 1344 1345 1346 |
# File 'lib/adlint/cc1/object.rb', line 1340 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
1332 1333 1334 1335 1336 1337 1338 |
# File 'lib/adlint/cc1/object.rb', line 1332 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
1348 1349 1350 1351 |
# File 'lib/adlint/cc1/object.rb', line 1348 def free(mem_block) @memory_blocks.delete(mem_block.address) @address_ranges.reject! { |range| range.include?(mem_block.address) } end |
#lookup(addr) ⇒ Object
1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 |
# File 'lib/adlint/cc1/object.rb', line 1353 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 |