summaryrefslogtreecommitdiff
path: root/vm_core.h
diff options
context:
space:
mode:
authornormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-08-15 05:54:41 +0000
committernormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-08-15 05:54:41 +0000
commit727a2d55a30e6a2c3fec99eee19ced9301e8a958 (patch)
tree38ba08e6dc4e9c2a6943e8dacbce63672d1c50f0 /vm_core.h
parent906ad1670a2c589c271953b08b963440d35bac9f (diff)
vm_core.h (rb_thread_t): pack small fields together
On a 64-bit system, this reduces rb_thread_t from 536 to 520 bytes. Depending on the allocation, this can reduce cacheline access for checking the abort_on_exception, report_on_exception and pending_interrupt_queue_checked flags. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64376 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_core.h')
-rw-r--r--vm_core.h16
1 files changed, 8 insertions, 8 deletions
diff --git a/vm_core.h b/vm_core.h
index 4fb6e07..38a5775 100644
--- a/vm_core.h
+++ b/vm_core.h
@@ -879,9 +879,14 @@ typedef struct rb_thread_struct {
#ifdef NON_SCALAR_THREAD_ID
rb_thread_id_string_t thread_id_string;
#endif
- enum rb_thread_status status;
- int to_kill;
- int priority;
+ BITFIELD(enum rb_thread_status) status : 2;
+ /* bit flags */
+ unsigned int to_kill : 1;
+ unsigned int abort_on_exception: 1;
+ unsigned int report_on_exception: 1;
+ unsigned int pending_interrupt_queue_checked: 1;
+ int8_t priority; /* -3 .. 3 (RUBY_THREAD_PRIORITY_{MIN,MAX}) */
+ uint32_t running_time_us; /* 12500..800000 */
native_thread_data_t native_thread_data;
void *blocking_region_buffer;
@@ -919,12 +924,7 @@ typedef struct rb_thread_struct {
/* misc */
VALUE name;
- uint32_t running_time_us; /* 12500..800000 */
- /* bit flags */
- unsigned int abort_on_exception: 1;
- unsigned int report_on_exception: 1;
- unsigned int pending_interrupt_queue_checked: 1;
} rb_thread_t;
typedef enum {