-void *xbt_mallocator_get(xbt_mallocator_t m) {
-
-void *object;
- xbt_assert0(m != NULL, "Invalid parameter");
-
-
- if (m->current_size > 0) {
- /* there is at least an available object */
+void *xbt_mallocator_get(xbt_mallocator_t m)
+{
+ void *object;
+
+ if (MALLOCATOR_IS_ENABLED) {
+ if (m->current_size <= 0) {
+ /* No object is ready yet. Create a bunch of them to try to group the
+ * mallocs on the same memory pages (to help the cache lines) */
+
+ /* XBT_DEBUG("Create a new object for mallocator %p (size:%d/%d)", */
+ /* m, m->current_size, m->max_size); */
+ int i;
+ int amount = MIN(m->max_size / 2, 1000);
+ for (i = 0; i < amount; i++)
+ m->objects[i] = m->new_f();
+ m->current_size = amount;
+ }
+
+ /* there is at least an available object, now */
+ /* XBT_DEBUG("Reuse an old object for mallocator %p (size:%d/%d)", */
+ /* m, m->current_size, m->max_size); */