union _Block_record
{
// Points to the block_record of the next free block.
- _Block_record* volatile _M_next;
+ _Block_record* _M_next;
};
struct _Bin_record
{
// An "array" of pointers to the first free block.
- _Block_record** volatile _M_first;
+ _Block_record** _M_first;
// A list of the initial addresses of all allocated blocks.
_Block_address* _M_address;
// An "array" of bin_records each of which represents a specific
// power of 2 size. Memory to this "array" is allocated in
// _M_initialize().
- _Bin_record* volatile _M_bin;
+ _Bin_record* _M_bin;
// Actual value calculated in _M_initialize().
size_t _M_bin_size;
struct _Thread_record
{
// Points to next free thread id record. NULL if last record in list.
- _Thread_record* volatile _M_next;
+ _Thread_record* _M_next;
// Thread id ranging from 1 to _S_max_threads.
size_t _M_id;
union _Block_record
{
// Points to the block_record of the next free block.
- _Block_record* volatile _M_next;
+ _Block_record* _M_next;
// The thread id of the thread which has requested this block.
size_t _M_thread_id;
// An "array" of pointers to the first free block for each
// thread id. Memory to this "array" is allocated in
// _S_initialize() for _S_max_threads + global pool 0.
- _Block_record** volatile _M_first;
+ _Block_record** _M_first;
// A list of the initial addresses of all allocated blocks.
_Block_address* _M_address;
// blocks that are on the freelist/used for each thread id.
// Memory to these "arrays" is allocated in _S_initialize() for
// _S_max_threads + global pool 0.
- size_t* volatile _M_free;
- size_t* volatile _M_used;
+ size_t* _M_free;
+ size_t* _M_used;
// Each bin has its own mutex which is used to ensure data
// integrity while changing "ownership" on a block. The mutex
// An "array" of bin_records each of which represents a specific
// power of 2 size. Memory to this "array" is allocated in
// _M_initialize().
- _Bin_record* volatile _M_bin;
+ _Bin_record* _M_bin;
// Actual value calculated in _M_initialize().
size_t _M_bin_size;