memory optimization, using posix_memalign (#350)

This commit is contained in:
Tillsunset 2022-10-09 03:43:45 -05:00 committed by GitHub
parent 638e9e1f87
commit 0c9fb3143f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -194,8 +194,22 @@ namespace H264
#ifdef _WIN32
return _aligned_malloc(size, alignment);
#else
size += ((size % alignment) == 0) ? 0 : alignment - (size % alignment);
return aligned_alloc(alignment, size);
// alignment is atleast sizeof(void*)
alignment = std::max<WORD32>(alignment, sizeof(void*));
//smallest multiple of 2 at least as large as alignment
alignment--;
alignment |= alignment << 1;
alignment |= alignment >> 1;
alignment |= alignment >> 2;
alignment |= alignment >> 4;
alignment |= alignment >> 8;
alignment |= alignment >> 16;
alignment ^= (alignment >> 1);
void* temp;
posix_memalign(&temp, (size_t)alignment, (size_t)size);
return temp;
#endif
}