История изменений
Исправление
MOPKOBKA,
(текущая версия)
:
Ну ладно, указатель это число, но только если использовать gcc с выключенной оптимизацией, я тебя понял. А любые ситуации где указатель не ведет себя как число, объясняются например погодой, или другим сторонним явлением.
Если указатель это число, почему стандарт запрещает отнимать произвольные значения от указателя? Страница 556. Это что за число такое?
Почему по стандарту запрещенно делать так? Страница 649. И даже есть архитектура где так делать совсем-совсем нельзя, страница 15.
void my_realloc(void *p, size_t size)
{
void *new_p;
new_p = realloc(p, size);
printf("offset = %zu\n", new_p - p); // <--
}
Почему по стандарту запрещенно в конце концов делать так? Страница 95, пункт 5.
int a, b;
int *pa = &a;
int *pb = &b;
pa += (pb - pa);
return pa == pb;
Почему я знаю, можешь не отвечать, это все UB. B все это хорошо показывает что указатель не является числом с диапазоном включающим 0...(V)RAM_SIZE. Он не обладает просто свойствами числа о котором ты говоришь!
Ну и я не увидел, как ты объясняешь указатели с тегом. На некоторых архитектурах, указатель хранит не только адрес, но и например размер данных, или их тип. Невозможно взять число-адрес, и преобрезовать его в число-iskander9908а указатель, потому что для указателя не будут установлены эти дополнительные поля, отвечающие за тип и размер, и скорее всего процессор просто не даст непривелигированному пользователю их менять/создавать.
Кстати, вместо дампов позиционно-независимого кода советую осилить godbolt, очень удобно, и можно установить локально.
Исправление
MOPKOBKA,
:
Ну ладно, указатель это число, но только если использовать gcc с выключенной оптимизацией, я тебя понял. А любые ситуации где указатель не ведет себя как число, объясняются например погодой, или другим сторонним явлением.
Если указатель это число, почему стандарт запрещает отнимать произвольные значения от указателя? Страница 556. Это что за число такое?
Почему по стандарту запрещенно делать так? Страница 649. И даже есть архитектура где так делать совсем-совсем нельзя, страница 15.
void my_realloc(void *p, size_t size)
{
void *new_p;
new_p = realloc(p, size);
printf("offset = %zu\n", new_p - p); // <--
}
Почему по стандарту запрещенно в конце концов делать так? Страница 95, пункт 5.
int a, b;
int *pa = &a;
int *pb = &b;
pa += (pb - pa);
return pa == pb;
Почему я знаю, можешь не отвечать, это все UB. B все это хорошо показывает что указатель не является числом с диапазоном включающим 0...(V)RAM_SIZE. Он не обладает просто свойствами числа о котором ты говоришь!
Ну и я не увидел, как ты объясняешь указатели с тегом. На некоторых архитектурах, указатель хранит не только адрес, но и например размер данных, или их тип. Невозможно взять число, и преобрезовать его в число-iskander9908а указатель, потому что для указателя не будут установлены эти дополнительные поля, отвечающие за тип и размер, и скорее всего процессор просто не даст непривелигированному пользователю их менять/создавать.
Кстати, вместо дампов позиционно-независимого кода советую осилить godbolt, очень удобно, и можно установить локально.
Исправление
MOPKOBKA,
:
Ну ладно, указатель это число, но только если использовать gcc с выключенной оптимизацией, я тебя понял. А любые ситуации где указатель не ведет себя как число, объясняются например погодой, или другим сторонним явлением.
Если указатель это число, почему стандарт запрещает отнимать произвольные значения от указателя? Страница 556. Это что за число такое?
Почему по стандарту запрещенно делать так? Страница 649. И даже есть архитектура где так делать совсем-совсем нельзя, страница 15.
void my_realloc(void *p, size_t size)
{
void *new_p;
new_p = realloc(p, size);
printf("offset = %zu\n", new_p - p); // <--
}
Почему по стандарту запрещенно в конце концов делать так? Страница 95, пункт 5.
int a, b;
int *pa = &a;
int *pb = &b;
pa += (pb - pa);
return pa == pb;
Почему я знаю, можешь не отвечать, это все UB. B все это хорошо показывает что указатель не является числом с диапазоном включающим 0...RAM_SIZE. Он не обладает просто свойствами числа о котором ты говоришь!
Ну и я не увидел, как ты объясняешь указатели с тегом. На некоторых архитектурах, указатель хранит не только адрес, но и например размер данных, или их тип. Невозможно взять число, и преобрезовать его в число-iskander9908а указатель, потому что для указателя не будут установлены эти дополнительные поля, отвечающие за тип и размер, и скорее всего процессор просто не даст непривелигированному пользователю их менять/создавать.
Кстати, вместо дампов позиционно-независимого кода советую осилить godbolt, очень удобно, и можно установить локально.
Исправление
MOPKOBKA,
:
Ну ладно, указатель это число, но только если использовать gcc с выключенной оптимизацией, я тебя понял. А любые ситуации где указатель не ведет себя как число, объясняются например погодой, или другим сторонним явлением.
Если указатель это число, почему стандарт запрещает отнимать произвольные значения от указателя? Страница 556. Это что за число такое?
Почему по стандарту запрещенно делать так? Страница 649. И даже есть архитектура где так делать совсем-совсем нельзя, страница 15.
void my_realloc(void *p, size_t size)
{
void *new_p;
new_p = realloc(p, size);
printf("offset = %zu\n", new_p - p); // <--
}
Почему по стандарту запрещенно в конце концов делать так? Страница 95, пункт 5.
int a, b;
int *pa = &a;
int *pb = &b;
pa += (pb - pa);
return pa == pb;
Почему я знаю, можешь не отвечать, это все UB. B все это хорошо показывает что указатель не является числом с диапазоном включающим 0...RAM_SIZE. Он не обладает просто свойствами числа о котором ты говоришь!
Ну и я не увидел, как ты объясняешь указатели с тегом. На некоторых архитектурах, указатель хранит не только адрес, но и например размер данных, или их тип. Невозможно взять число, и преобрезовать его в число-iskander9908а указатель, потому что для указателя не будут установлены эти дополнительные поля, отвечающие за тип и размер, и скорее всего процессор просто не даст непривелигированному пользователю их менять/создавать.
Кстати, вместо дампов позиционно-независимого кода советую осилить godbolt, очень удобно.
Исправление
MOPKOBKA,
:
Ну ладно, указатель это число, но только если использовать gcc с выключенной оптимизацией, я тебя понял. А любые ситуации где указатель не ведет себя как число, объясняются например погодой, или другим сторонним явлением.
Если указатель это число, почему стандарт запрещает отнимать произвольные значения от указателя? Страница 556. Это что за число такое?
Почему по стандарту запрещенно делать так? Страница 649. И даже есть архитектура где так делать совсем-совсем нельзя, страница 15.
void my_realloc(void *p, size_t size)
{
void *new_p;
new_p = realloc(p, size);
printf("offset = %zu\n", new_p - p); // <--
}
Почему по стандарту запрещенно в конце концов делать так? Страница 95, пункт 5.
int a, b;
int *pa = &a;
int *pb = &b;
pa += (pb - pa);
return pa == pb;
Почему я знаю, можешь не отвечать, это все UB. B все это хорошо показывает что указатель не является числом с диапазоном включающим 0...RAM_SIZE. Он не обладает просто свойствами числа о котором ты говоришь!
Ну и я не увидел, как ты объясняешь указатели с тегом. На некоторых архитектурах, указатель хранит не только адрес, но и например размер данных, или их тип. Невозможно взять число, и преобрезовать его в число-iskander9908а указатель, потому что для указателя не будут установлены эти дополнительные поля, отвечающие за тип и размер, и скорее всего процессор просто не даст непривелигированному пользователю их менять/создавать.
Исправление
MOPKOBKA,
:
Ну ладно, указатель это число, но только если использовать gcc с выключенной оптимизацией, я тебя понял. А любые ситуации где указатель не ведет себя как число, объясняются например погодой, или другим сторонним явлением.
Если указатель это число, почему стандарт запрещает отнимать произвольные значения от указателя? Страница 556. Это что за число такое?
Почему по стандарту запрещенно делать так? Страница 649. И даже есть архитектура где так делать совсем-совсем нельзя, страница 15.
void my_realloc(void *p, size_t size)
{
void *new_p;
new_p = realloc(p, size);
printf("offset = %zu\n", new_p - p); // <--
}
Почему по стандарту запрещенно в конце концов делать так? Страница 95, пункт 5.
int a, b;
int *pa = &a;
int *pb = &b;
pa += (pb - pa);
return pa == pb;
Почему я знаю, можешь не отвечать, это все UB. B все это хорошо показывает что указатель не является числом с диапазоном включающим 0...RAM_SIZE. Он не обладает просто свойствами числа!
Ну и я не увидел, как ты объясняешь указатели с тегом. На некоторых архитектурах, указатель хранит не только адрес, но и например размер данных, или их тип. Невозможно взять число, и преобрезовать его в число-iskander9908а указатель, потому что для указателя не будут установлены эти дополнительные поля, отвечающие за тип и размер, и скорее всего процессор просто не даст непривелигированному пользователю их менять/создавать.
Исправление
MOPKOBKA,
:
Ну ладно, указатель это число, но только если использовать gcc с выключенной оптимизацией, я тебя понял. А любые ситуации где указатель не ведет себя как число, объясняются например погодой, или другим сторонним явлением.
Если указатель это число, почему стандарт запрещает отнимать произвольные значения от указателя? Страница 556. Это что за число такое?
Почему по стандарту запрещенно делать так? Страница 649. И даже есть архитектура где так делать совсем-совсем нельзя, страница 15.
void my_realloc(void *p, size_t size)
{
void *new_p;
new_p = realloc(p, size);
printf("offset = %zu\n", new_p - p); // <--
}
Почему по стандарту запрещенно в конце концов делать так? Страница 95, пункт 5.
int a, b;
int *pa = &a;
int *pb = &b;
pa += (pb - pa);
return pa == pb;
Все это хорошо показывает что указатель не является числом с диапазоном включающим 0...RAM_SIZE
Ну и я не увидел, как ты объясняешь указатели с тегом. На некоторых архитектурах, указатель хранит не только адрес, но и например размер данных, или их тип. Невозможно взять число, и преобрезовать его в число-iskander9908а указатель, потому что для указателя не будут установлены эти дополнительные поля, отвечающие за тип и размер, и скорее всего процессор просто не даст непривелигированному пользователю их менять/создавать.
Исправление
MOPKOBKA,
:
Ну ладно, указатель это число, но только если использовать gcc с выключенной оптимизацией, я тебя понял. А любые ситуации где указатель не ведет себя как число, объясняются например погодой, или другим сторонним явлением.
Если указатель это число, почему стандарт запрещает отнимать произвольные значения от указателя? Страница 556. Это что за число такое?
Почему по стандарту запрещенно делать так? Страница 649. И даже есть архитектура где так делать совсем-совсем нельзя, страница 15.
void my_realloc(void *p, size_t size)
{
void *new_p;
new_p = realloc(p, size);
printf("offset = %zu\n", new_p - p); // <--
}
Почему по стандарту запрещенно в конце концов делать так? Страница 95, пункт 5.
int a, b;
int *pa = &a;
int *pb = &b;
pa += (pb - pa);
return pa == pb;
Все это хорошо показывает что указатель не является числом с диапазоном включающим 0...RAM_SIZE
Исправление
MOPKOBKA,
:
Ну ладно, указатель это число, но только если использовать gcc с выключенной оптимизацией, я тебя понял. А любые ситуации где указатель не ведет себя как число, объясняются например погодой, или другим сторонним явлением.
Если указатель это число, почему стандарт запрещает отнимать произвольные значения от указателя? Страница 556. Это что за число такое?
Почему по стандарту запрещенно делать так? Страница 649.
void my_realloc(void *p, size_t size)
{
void *new_p;
new_p = realloc(p, size);
printf("offset = %zu\n", new_p - p); // <--
}
Почему по стандарту запрещенно в конце концов делать так? Страница 95, пункт 5.
int a, b;
int *pa = &a;
int *pb = &b;
pa += (pb - pa);
return pa == pb;
Все это хорошо показывает что указатель не является числом с диапазоном включающим 0...RAM_SIZE
Исправление
MOPKOBKA,
:
Ну ладно, указатель это число, но только если использовать gcc с выключенной оптимизацией, я тебя понял. А любые ситуации где указатель не ведет себя как число, объясняются например погодой, или другим сторонним явлением.
Если указатель это число, почему стандарт запрещает отнимать произвольные значения от указателя? Страница 556. Это что за число такое?
Почему по стандарту запрещенно делать так? Страница 649.
void my_realloc(void *p, size_t size)
{
void *new_p;
new_p = realloc(p, size);
printf("offset = %zu\n", new_p - p); // <--
}
Почему по стандарту запрещенно в конце концов делать так? Страница 95, пункт 5.
int a, b;
int *pa = &a;
int *pb = &b;
pa += (pb - pa);
return pa == pb;
Все это хорошо показывает что указатель не является числом с диапазоном включающим 0...RAM_SIZE
Исправление
MOPKOBKA,
:
Ну ладно, указатель это число, но только если использовать gcc с выключенной оптимизацией, я тебя понял. А любые ситуации где указатель не ведет себя как число, объясняются например погодой, или другим сторонним явлением.
Исходная версия
MOPKOBKA,
:
Ну ладно, указатель это число, но только если использовать gcc с выключенной оптимизацией, я тебя понял.