diff options
author | Nicholas Clark <nick@ccl4.org> | 2005-09-17 17:09:25 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2005-09-17 17:09:25 +0000 |
commit | c99e3826c46ffcfffa9fb9cdc6d049c77e4d8112 (patch) | |
tree | 314f948ebe207b31c309cdfa2c6aa6e474c8173c /pod | |
parent | 62403a3c834f3ce459f6efd4d74fba81521e3342 (diff) | |
download | perl-c99e3826c46ffcfffa9fb9cdc6d049c77e4d8112.tar.gz |
Add emulate the per-thread memory pool on Unix to the TODO
p4raw-id: //depot/perl@25439
Diffstat (limited to 'pod')
-rw-r--r-- | pod/perltodo.pod | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/pod/perltodo.pod b/pod/perltodo.pod index e315cd3023..0caa728164 100644 --- a/pod/perltodo.pod +++ b/pod/perltodo.pod @@ -273,6 +273,37 @@ anyone feeling like exercising their skill with coverage and profiling tools might want to determine what ops I<really> are the most commonly used. And in turn suggest evictions and promotions to achieve a better F<pp_hot.c>. +=head2 emulate the per-thread memory pool on Unix + +For Windows, ithreads allocates memory for each thread from a separate pool, +which it discards at thread exit. It also checks that memory is free()d to +the correct pool. Neither check is done on Unix, so code developed there won't +be subject to such strictures, so can harbour bugs that only show up when the +code reaches Windows. + +It would be good to be able to optionally emulate the Window pool system on +Unix, to let developers who only have access to Unix, or want to use +Unix-specific debugging tools, check for these problems. To do this would +involve figuring out how the C<PerlMem_*> macros wrap C<malloc()> access, and +providing a layer that records/checks the identity of the thread making the +call, and recording all the memory allocated by each thread via this API so +that it can be summarily free()d at thread exit. One implementation idea +would be to increase the size of allocation, and store the C<my_perl> pointer +(to identify the thread) at the start, along with pointers to make a linked +list of blocks for this thread. To avoid alignment problems it would be +necessary to do something like + + union memory_header_padded { + struct memory_header { + void *thread_id; /* For my_perl */ + void *next; /* Pointer to next block for this thread */ + } data; + long double padding; /* whatever type has maximal alignment constraint */ + }; + + +although C<long double> might not be the only type to add to the padding +union. |