diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-12-05 14:44:46 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-01-03 17:09:14 +0100 |
commit | 658a15a075de2b5a77c1d1b4455eaf0ea0f81f47 (patch) | |
tree | 1dab8c78438b8a89ba1917aea26b4b1be9a71507 /src | |
parent | 74ef33c8818544ef64288ab7193897a96413216e (diff) |
Clear out memory in the GC, not when constructing objects
Object construction shouldn't need to zero initialize itself,
let's rather do this in the GC, where we can use fast memset's.
Change-Id: I2f9efa1729183b0d737de5a84f92af319b2c5631
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/jsruntime/qv4mm.cpp | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4object.cpp | 4 |
2 files changed, 2 insertions, 4 deletions
diff --git a/src/qml/jsruntime/qv4mm.cpp b/src/qml/jsruntime/qv4mm.cpp index f67efaffb9..625e34de07 100644 --- a/src/qml/jsruntime/qv4mm.cpp +++ b/src/qml/jsruntime/qv4mm.cpp @@ -275,6 +275,7 @@ Managed *MemoryManager::alloc(std::size_t size) if (size >= MemoryManager::Data::MaxItemSize) { // we use malloc for this MemoryManager::Data::LargeItem *item = static_cast<MemoryManager::Data::LargeItem *>(malloc(size + sizeof(MemoryManager::Data::LargeItem))); + memset(item, 0, size + sizeof(MemoryManager::Data::LargeItem)); item->next = m_d->largeItems; m_d->largeItems = item; return item->managed(); @@ -520,6 +521,7 @@ void MemoryManager::sweep(char *chunkStart, std::size_t chunkSize, size_t size, m->internalClass->vtable->collectDeletables(m, deletable); m->internalClass->vtable->destroy(m); + memset(m, 0, size); m->setNextFree(*f); #ifdef V4_USE_VALGRIND VALGRIND_DISABLE_ERROR_REPORTING; diff --git a/src/qml/jsruntime/qv4object.cpp b/src/qml/jsruntime/qv4object.cpp index 106525d412..115473604c 100644 --- a/src/qml/jsruntime/qv4object.cpp +++ b/src/qml/jsruntime/qv4object.cpp @@ -72,17 +72,14 @@ DEFINE_MANAGED_VTABLE(Object); Object::Object(ExecutionEngine *engine) : Managed(engine->objectClass) , memberDataAlloc(InlinePropertySize), memberData(inlineProperties) - , arrayOffset(0), arrayDataLen(0), arrayAlloc(0), arrayAttributes(0), arrayData(0), sparseArray(0) { type = Type_Object; flags = SimpleArray; - memset(memberData, 0, sizeof(Property)*memberDataAlloc); } Object::Object(InternalClass *ic) : Managed(ic) , memberDataAlloc(InlinePropertySize), memberData(inlineProperties) - , arrayOffset(0), arrayDataLen(0), arrayAlloc(0), arrayAttributes(0), arrayData(0), sparseArray(0) { Q_ASSERT(internalClass->vtable && internalClass->vtable != &Managed::static_vtbl); type = Type_Object; @@ -92,7 +89,6 @@ Object::Object(InternalClass *ic) memberDataAlloc = internalClass->size; memberData = new Property[memberDataAlloc]; } - memset(memberData, 0, sizeof(Property)*memberDataAlloc); } Object::~Object() |