Home | History | Annotate | Download | only in sljit

Lines Matching defs:size

41    header contains the size of the previous and the next block. These sizes
43 Block size:
44 0 - The block is a free_block, with a different size member.
46 n - The block is used at the moment, and the value contains its size.
47 Previous block size:
49 n - The size of the previous block.
51 Using these size values we can go forward or backward on the block chain.
74 * the size is always divisible by CHUNK_SIZE
84 static SLJIT_INLINE void* alloc_chunk(sljit_uw size)
86 return VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
89 static SLJIT_INLINE void free_chunk(void* chunk, sljit_uw size)
91 SLJIT_UNUSED_ARG(size);
97 static SLJIT_INLINE void* alloc_chunk(sljit_uw size)
102 retval = mmap(NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANON, -1, 0);
108 retval = mmap(NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE, dev_zero, 0);
114 static SLJIT_INLINE void free_chunk(void* chunk, sljit_uw size)
116 munmap(chunk, size);
128 sljit_uw size;
136 sljit_uw size;
144 #define ALIGN_SIZE(size) (((size) + sizeof(struct block_header) + 7) & ~7)
150 static SLJIT_INLINE void sljit_insert_free_block(struct free_block *free_block, sljit_uw size)
152 free_block->header.size = 0;
153 free_block->size = size;
175 SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size)
183 if (size < sizeof(struct free_block))
184 size = sizeof(struct free_block);
185 size = ALIGN_SIZE(size);
189 if (free_block->size >= size) {
190 chunk_size = free_block->size;
191 if (chunk_size > size + 64) {
193 chunk_size -= size;
194 free_block->size = chunk_size;
197 AS_BLOCK_HEADER(header, size)->prev_size = size;
202 size = chunk_size;
204 allocated_size += size;
205 header->size = size;
212 chunk_size = (size + sizeof(struct block_header) + CHUNK_SIZE - 1) & CHUNK_MASK;
223 if (chunk_size > size + 64) {
225 allocated_size += size;
226 header->size = size;
227 chunk_size -= size;
229 free_block = AS_FREE_BLOCK(header, size);
230 free_block->header.prev_size = size;
237 header->size = chunk_size;
240 next_header->size = 1;
253 allocated_size -= header->size;
258 In this case, free_block->header.size will be > 0. */
260 if (SLJIT_UNLIKELY(!free_block->header.size)) {
261 free_block->size += header->size;
262 header = AS_BLOCK_HEADER(free_block, free_block->size);
263 header->prev_size = free_block->size;
267 sljit_insert_free_block(free_block, header->size);
270 header = AS_BLOCK_HEADER(free_block, free_block->size);
271 if (SLJIT_UNLIKELY(!header->size)) {
272 free_block->size += ((struct free_block*)header)->size;
274 header = AS_BLOCK_HEADER(free_block, free_block->size);
275 header->prev_size = free_block->size;
279 if (SLJIT_UNLIKELY(!free_block->header.prev_size && header->size == 1)) {
281 if (total_size - free_block->size > (allocated_size * 3 / 2)) {
282 total_size -= free_block->size;
284 free_chunk(free_block, free_block->size + sizeof(struct block_header));
302 AS_BLOCK_HEADER(free_block, free_block->size)->size == 1) {
303 total_size -= free_block->size;
305 free_chunk(free_block, free_block->size + sizeof(struct block_header));