mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	struct iseq_compile_data_storage: 16 bytes (from 32) overhead
This reduces the iseq_compile_data_storage header from 32 to 16 bytes on 64-bit systems. pos and size fields cannot exceed 32-bit sizes due to stack size limits. Using a flexible array for the buffer also saves us 8 bytes of pointer overhead. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46958 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									a9c7629ece
								
							
						
					
					
						commit
						36b476cd1e
					
				
					 4 changed files with 15 additions and 10 deletions
				
			
		|  | @ -1,3 +1,8 @@ | |||
| Sat Jul 26 16:55:18 2014  Eric Wong  <e@80x24.org> | ||||
| 
 | ||||
| 	* iseq.h (struct iseq_compile_data_storage): reduce overhead | ||||
| 	  to 16 bytes (from 32) on 64-bit | ||||
| 
 | ||||
| Sat Jul 26 16:28:06 2014  Eric Wong  <e@80x24.org> | ||||
| 
 | ||||
| 	* vm_core.h (struct rb_iseq_struct): reduce to 280 bytes | ||||
|  |  | |||
|  | @ -604,13 +604,11 @@ compile_data_alloc(rb_iseq_t *iseq, size_t size) | |||
| 	    goto retry; | ||||
| 	} | ||||
| 	storage->next = (void *)ALLOC_N(char, alloc_size + | ||||
| 					sizeof(struct | ||||
| 					       iseq_compile_data_storage)); | ||||
| 					SIZEOF_ISEQ_COMPILE_DATA_STORAGE); | ||||
| 	storage = iseq->compile_data->storage_current = storage->next; | ||||
| 	storage->next = 0; | ||||
| 	storage->pos = 0; | ||||
| 	storage->size = alloc_size; | ||||
| 	storage->buff = (char *)(&storage->buff + 1); | ||||
|     } | ||||
| 
 | ||||
|     ptr = (void *)&storage->buff[storage->pos]; | ||||
|  |  | |||
							
								
								
									
										6
									
								
								iseq.c
									
										
									
									
									
								
							
							
						
						
									
										6
									
								
								iseq.c
									
										
									
									
									
								
							|  | @ -153,7 +153,7 @@ iseq_memsize(const void *ptr) | |||
| 
 | ||||
| 		cur = iseq->compile_data->storage_head; | ||||
| 		while (cur) { | ||||
| 		    size += cur->size + sizeof(struct iseq_compile_data_storage); | ||||
| 		    size += cur->size + SIZEOF_ISEQ_COMPILE_DATA_STORAGE; | ||||
| 		    cur = cur->next; | ||||
| 		} | ||||
| 		size += sizeof(struct iseq_compile_data); | ||||
|  | @ -293,15 +293,13 @@ prepare_iseq_build(rb_iseq_t *iseq, | |||
|     iseq->compile_data->storage_head = iseq->compile_data->storage_current = | ||||
|       (struct iseq_compile_data_storage *) | ||||
| 	ALLOC_N(char, INITIAL_ISEQ_COMPILE_DATA_STORAGE_BUFF_SIZE + | ||||
| 		sizeof(struct iseq_compile_data_storage)); | ||||
| 		SIZEOF_ISEQ_COMPILE_DATA_STORAGE); | ||||
| 
 | ||||
|     RB_OBJ_WRITE(iseq->self, &iseq->compile_data->catch_table_ary, rb_ary_new()); | ||||
|     iseq->compile_data->storage_head->pos = 0; | ||||
|     iseq->compile_data->storage_head->next = 0; | ||||
|     iseq->compile_data->storage_head->size = | ||||
|       INITIAL_ISEQ_COMPILE_DATA_STORAGE_BUFF_SIZE; | ||||
|     iseq->compile_data->storage_head->buff = | ||||
|       (char *)(&iseq->compile_data->storage_head->buff + 1); | ||||
|     iseq->compile_data->option = option; | ||||
|     iseq->compile_data->last_coverable_line = -1; | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										10
									
								
								iseq.h
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								iseq.h
									
										
									
									
									
								
							|  | @ -88,11 +88,15 @@ iseq_catch_table_bytes(int n) | |||
| 
 | ||||
| struct iseq_compile_data_storage { | ||||
|     struct iseq_compile_data_storage *next; | ||||
|     unsigned long pos; | ||||
|     unsigned long size; | ||||
|     char *buff; | ||||
|     unsigned int pos; | ||||
|     unsigned int size; | ||||
|     char buff[1]; /* flexible array */ | ||||
| }; | ||||
| 
 | ||||
| /* account for flexible array */ | ||||
| #define SIZEOF_ISEQ_COMPILE_DATA_STORAGE \ | ||||
|     (sizeof(struct iseq_compile_data_storage) - 1) | ||||
| 
 | ||||
| struct iseq_compile_data { | ||||
|     /* GC is needed */ | ||||
|     const VALUE err_info; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 normal
						normal