История изменений
Исправление firkax, (текущая версия) :
И это, кстати, не делает адресацию линейной :D
Конечно не делает. Такой инкремент можно и в сегментной сделать. Только там он почти потеряет осмысленность, если ptr указывало на последний байт сегмента (результат может оказаться как в некорректном адресе, так и в начале этого сегмента, так и в начале какого-то другого). А тут - только если на последний байт памяти (0xFFFFFFFF для 32-битной).
Лулз в том, что это все ещё арифметика указателей, и ptr может быть хоть структурой с сотней полей
Не очень убедительная придирка, но ладно, можно тогда так, что б уж наверняка: next = (void*)(((intptr)ptr)+1);
. Но вообще, ptr+i это синоним к (something*)(((intptr)ptr)+sizeof(*ptr)*i)
за может быть мелкими исключениями. Но вот такое уже точно нежелательно к сегментной модели применять.
Исходная версия firkax, :
И это, кстати, не делает адресацию линейной :D
Конечно не делает. Такой инкремент можно и в сегментной сделать. Только там он почти потеряет осмысленность, если ptr указывало на последний байт сегмента (результат может оказаться как в некорректном адресе, так и в начале этого сегмента, так и в начале какого-то другого). А тут - только если на последний байт памяти (0xFFFFFFFF для 32-битной).
Лулз в том, что это все ещё арифметика указателей, и ptr может быть хоть структурой с сотней полей
Не очень убедительная придирка, но ладно, можно тогда так, что б уж наверняка: next = (void*)(((intptr)ptr)+1);
. Но вообще, ptr+i это синоним к (something*)(((intptr)ptr)+sizeof(*ptr)*i)
за может быть мелкими исключениями.