Гид «Использование односвязных списков» использования _aligned_malloc
выделить структуру SLIST_HEADER перед вызовом InitializeSListHead()
в теме. Требуется ли, чтобы структура заголовка списка помещалась в кучу? Я имею в виду, это объявлено с DECLSPEC_ALIGN(16)
(на Win64) компилятор поместил бы его на требуемую 16-байтовую границу, не так ли?
Дешевая распродажа здесь — соединение библиотек. Часть SLIST происходит от самой Windows (не предполагает C / C ++), в то время как _aligned_malloc
исходит из MSVCRT. Поскольку код SLIST не может даже предполагать, что MSVCRT используется, он не знает, откуда взялась память.
Поэтому не имеет значения, каким образом вы (или компилятор) выравниваете память, или как ваш язык называет определенную категорию памяти. (Ваша «куча» скорее всего не куча Windows в HeapAlloc
смысл слова)
Других решений пока нет …