Skip to content

Commit 05758b7

Browse files
committed
Optimize allocation
1 parent 01ae040 commit 05758b7

File tree

1 file changed

+21
-17
lines changed

1 file changed

+21
-17
lines changed

Objects/tupleobject.c

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1232,6 +1232,13 @@ struct PyTupleWriter {
12321232
};
12331233

12341234

1235+
static inline void
1236+
tuplewriter_free(PyTupleWriter *writer)
1237+
{
1238+
_Py_FREELIST_FREE(tuple_writers, writer, PyMem_Free);
1239+
}
1240+
1241+
12351242
static int
12361243
_PyTupleWriter_SetSize(PyTupleWriter *writer, size_t size, int resize)
12371244
{
@@ -1286,21 +1293,25 @@ PyTupleWriter_Create(Py_ssize_t size)
12861293
return NULL;
12871294
}
12881295
}
1289-
#ifdef Py_DEBUG
1290-
memset(writer->small_tuple, 0xff, sizeof(writer->small_tuple));
1291-
#endif
1292-
writer->tuple = NULL;
1293-
writer->items = writer->small_tuple;
12941296
writer->size = 0;
1295-
writer->allocated = Py_ARRAY_LENGTH(writer->small_tuple);
12961297

1297-
if ((size_t)size > writer->allocated) {
1298-
if (_PyTupleWriter_SetSize(writer, size, 0) < 0) {
1299-
PyTupleWriter_Discard(writer);
1298+
if (size != 0) {
1299+
writer->tuple = _PyTuple_NewNoTrack(size);
1300+
if (writer->tuple == NULL) {
1301+
tuplewriter_free(writer);
13001302
return NULL;
13011303
}
1304+
writer->items = _PyTuple_ITEMS(writer->tuple);
1305+
writer->allocated = size;
1306+
}
1307+
else {
1308+
#ifdef Py_DEBUG
1309+
memset(writer->small_tuple, 0xff, sizeof(writer->small_tuple));
1310+
#endif
1311+
writer->tuple = NULL;
1312+
writer->items = writer->small_tuple;
1313+
writer->allocated = Py_ARRAY_LENGTH(writer->small_tuple);
13021314
}
1303-
13041315
return writer;
13051316
}
13061317

@@ -1383,13 +1394,6 @@ _PyTupleWriter_GetItems(PyTupleWriter *writer, Py_ssize_t *size)
13831394
}
13841395

13851396

1386-
static inline void
1387-
tuplewriter_free(PyTupleWriter *writer)
1388-
{
1389-
_Py_FREELIST_FREE(tuple_writers, writer, PyMem_Free);
1390-
}
1391-
1392-
13931397
void
13941398
PyTupleWriter_Discard(PyTupleWriter *writer)
13951399
{

0 commit comments

Comments
 (0)