A method for managing memory in a system for an application (333,700), comprising: assigning a first block of the memory to the application (333, 700) when the application (333, 700) is initiated, the first block having a first size, the first block being assigned to the application (333, 700) until the application (333, 700) is terminated; dividing the first block into second blocks, each second block having a same second size, a second block of the second blocks for containing data for one or more components of a single data structure to be accessed by one thread of the application (333, 700) at a time; and dividing the second block into third blocks, each third block having a same third size, a third block of the third blocks for containing data for a single component of the single data structure; characterised by, if the single component is associated with variable length data: assigning a fourth block of the memory to the application (333, 700) when the application (333, 700) is initiated, the fourth block having a fourth size, the fourth block being assigned to the application (333, 700) until the application (333, 700) is terminated; dividing the fourth block into portions, each portion having a variable size, the variable size being indicated at both a start and an end of the portion; and establishing a pointer from the third block to a portion of the fourth block, the portion for containing the variable length data of the single component, the third block for containing the pointer. assigning a first block of the memory to the application (333, 700) when the application (333, 700) is initiated, the first block having a first size, the first block being assigned to the application (333, 700) until the application (333, 700) is terminated; dividing the first block into second blocks, each second block having a same second size, a second block of the second blocks for containing data for one or more components of a single data structure to be accessed by one thread of the application (333, 700) at a time; and dividing the second block into third blocks, each third block having a same third size, a third block of the third blocks for containing data for a single component of the single data structure; characterised by, if the single component is associated with variable length data: assigning a fourth block of the memory to the application (333, 700) when the application (333, 700) is initiated, the fourth block having a fourth size, the fourth block being assigned to the application (333, 700) until the application (333, 700) is terminated; dividing the fourth block into portions, each portion having a variable size, the variable size being indicated at both a start and an end of the portion; and establishing a pointer from the third block to a portion of the fourth block, the portion for containing the variable length data of the single component, the third block for containing the pointer. assigning a fourth block of the memory to the application (333, 700) when the application (333, 700) is initiated, the fourth block having a fourth size, the fourth block being assigned to the application (333, 700) until the application (333, 700) is terminated; dividing the fourth block into portions, each portion having a variable size, the variable size being indicated at both a start and an end of the portion; and establishing a pointer from the third block to a portion of the fourth block, the portion for containing the variable length data of the single component, the third block for containing the pointer.