Allocate data seperately from MapBlock class again

This effectively reverts commit b3503e7853a52a8c16431f6b983e30c9d25951bc.
This commit is contained in:
sfan5 2023-12-12 15:03:34 +01:00
parent 2c2bc4a427
commit cb6e3ac6e1
2 changed files with 10 additions and 1 deletions

@ -70,6 +70,7 @@ MapBlock::MapBlock(Map *parent, v3s16 pos, IGameDef *gamedef):
m_parent(parent), m_parent(parent),
m_pos(pos), m_pos(pos),
m_pos_relative(pos * MAP_BLOCKSIZE), m_pos_relative(pos * MAP_BLOCKSIZE),
data(new MapNode[nodecount]),
m_gamedef(gamedef) m_gamedef(gamedef)
{ {
reallocate(); reallocate();
@ -83,6 +84,8 @@ MapBlock::~MapBlock()
mesh = nullptr; mesh = nullptr;
} }
#endif #endif
delete[] data;
} }
bool MapBlock::onObjectsActivation() bool MapBlock::onObjectsActivation()

@ -502,6 +502,13 @@ private:
*/ */
v3s16 m_pos_relative; v3s16 m_pos_relative;
/*
* Note that this is not an inline array because that has implications on
* heap fragmentation (the array is exactly 16K), CPU caches and/or
* optimizability of algorithms working on this array.
*/
MapNode *const data; // of `nodecount` elements
IGameDef *m_gamedef; IGameDef *m_gamedef;
/* /*
@ -558,7 +565,6 @@ private:
*/ */
int m_refcount = 0; int m_refcount = 0;
MapNode data[nodecount];
NodeTimerList m_node_timers; NodeTimerList m_node_timers;
}; };