Когда calloc используется указатели на вновь выделенную память, выровнены по меньшей мере с числовым числом наименее значимых бит, что означает, что наименее значимые биты (как помеченные указатели) могут использоваться для блокировки, свободных алгоритмов, и на самом деле обычно используется в случае этих алгоритмов. Я тестировал функцию памяти на сервере linux ubuntu (x86_64 GNU/Linux, 3.10.23-xxxx-std-ipv6-64-vps), и из моих экспериментов кажется, что для 4 младших значащих бит установлено значение 0. Из то, что я прочитал, указывает, что выравнивание указателя формируется таким образом, чтобы указатель, выраженный как uintptr, был разделен на 4 (выравнивание до 2 младших значащих бит)Выравнивание указателей для алгоритмов блокировки
Каково минимальное количество наименее значимых бит в недавно выделенных указатели памяти, полученные из системы управления памятью в POSIX (linux), которые всегда устанавливаются в 0 во время процесса выделения первичной памяти?
Каково максимальное количество наименее значимых битов, которые могут использоваться как тегированные указатели на Linux-системах (например, алгоритмы блокировки)?
Как заставить компилятор выровнять новые выделенные указатели, чтобы вывести число наименее значимых бит?
Является ли выравнивание указателей влияющим на общую производительность системы и как?
Там нет «минимум» или «максимальное» число младших значащих битов, которые установлены на 0. Выравнивание памяти зависит от платформы. Все, что вы знаете, это то, что система обычно имеет один тип, который ограничивает выравнивание памяти, и что 'malloc()' и другие функции выделения памяти всегда возвращают указатель, который соответствующим образом выровнен для самого строгого типа (и, следовательно, может использоваться с любым типом) –
И почему вы думаете, что существует связь между выравниванием памяти и алгоритмами блокировки? –
Я думаю, вы, возможно, захотите прочитать http://man7.org/linux/man-pages/man3/posix_memalign.3.html. Обычно выравнивание памяти основано на sizeof (double). Если вы вызываете функции на страницах руководства, его можно изменить. –