>а ты можешь предложить реализацию sizeof в виде функции?
я не разбираюсь в вопросе, мне лишь интересно, а нельзя через указатели получить адрес начальной ячейкм памяти и последней, подсчитать количество ячеек между ними?
>я не разбираюсь в вопросе, мне лишь интересно, а нельзя через указатели получить адрес начальной ячейкм памяти и последней, подсчитать количество ячеек между ними?
Указатель - просто адрес. 0xfff04353476a
> не уверен что это гарантированно совпадёт с sizeof
это гарантированно совпадет с sizeof. Это собственно, является причиной почему бывает паддинг в конце структур, и почему паддинг в конце включается в sizeof.
кстати, там не обязательно 2 элемента — достаточно массива из одного элемента, потому что стандарт говорит что указатель на элемент за концом массива является валидным — с ним можно проводить арифметику и сравнивать.
на мой взгляд правильно будет только с массивом T a[1]; а просто с переменной T a; неправильно, потому что указатель на конец переменной не обязан быть валидным, а значит его не только нельзя разыменовывать, но и нельзя делать арифметику, то есть это UB.
А вот получить размер куска памяти, выделенного под указателем похоже никак нельзя... То есть free()-то знает сколько там освобождать, но средствами языка этого не узнать?