170 похожих чатов

Это с cpprefference паста. Получается, что по стандарту UB, но

многие реализации позволяют использовать std::less для сравнения указателей?

17 ответов

36 просмотров

Даже лучше. Как уже написал, для встроенных операторов в отношении указателей сравнения гарантируют только partial-order, однако имплементации обязаны поддерживать некоторый согласованный с таким порядком неуточняемый total-order, который используется для библиотечных компараторов. Нужно для надежной ассоциативности в ситуациях, где указатели являются ключами ordered-контейнеров.

Да и если без формальностей вдуматься в суть того, что предлагает сделать автор кода, сразу видно, что это какая-то ересь: взять два объекта в памяти и стереть память между ними. Во первых не понятно для чего? Можно же просто нужные переменные инитить нулями или чем надо, Во-вторых, где гарантия что нужные переменные в памяти расположатся именно так, а не иначе?

Стикер

Ilya Zviagin
Да и если без формальностей вдуматься в суть того,...

Почему ересь? Если это внешние символы линковщика все там правильно. вопрос что и как он их разместил, и выровнял. линковщик вам дает символ (не переменную) взяв адрес которого вы получите адрес расположения этого символа.

Stas Koynov
Почему ересь? Если это внешние символы линковщика ...

Писать между объектами это UB. То есть, ересь.

Ilya Zviagin
Писать между объектами это UB. То есть, ересь.

Это не обьекты это просто память, нет там обьектов. А то что в ++ сейчас все UB ну так чтож не программировать микроконтроллеры на нем? рано или поздно допилят, а если нет, то да после каждой генерацией идти и проверять асм, что он там придумал.

Stas Koynov
Это не обьекты это просто память, нет там обьектов...

Это означает, что вам нужен memset с О0, например, в отдельном файле. Или асм, как это сделано во многих embedded startup-файлах

Ilya Zviagin
Тоже нельзя. Тоже UB.

Норм компиляторы типа gcc это разрешают. вот взять 12.3 прекрасно можно занулить секцию bss: /* Uninitialized data section */ .bss : { . = ALIGN(4); __bss_start = .; *(.bss*) *(COMMON) . = ALIGN(4); __bss_end = .; } > RAM_D2 extern uint32_t __bss_start, __bss_end, inline void __init_bss(uint32_t *bss_start, uint32_t *bss_stop) { while(bss_start != bss_stop) *bss_start++ = 0; } __init_bss(&__bss_start, &__bss_end); //zero fill bss section(zero vars) __libc_init_array(); //call static constructors

Stas Koynov
Норм компиляторы типа gcc это разрешают. вот взять...

реализация компилятора и стандарт 2 разные вещи

Aniki Hi$ok@ 🌈 Z 🐀
реализация компилятора и стандарт 2 разные вещи

Важнее вопрос наличия (или отсутствия) гарантий, на которые можно было бы положиться - хоть стандартных, хоть имплементационных. Либо да, post-build верификаторами какими-то пользоваться на те участки, по которым гарантий не было (при условии, что их вообще можно локализовать).

Aniki Hi$ok@ 🌈 Z 🐀
реализация компилятора и стандарт 2 разные вещи

Я еще раз повторю, взрослые компиляторы на которых пишут ОСи и т.п это жрет, а то что это УБ ибо там нет обьектов, и ой эта сырая память, и бла бла бла... я не хочу эту тему поднимать и холиварить. вопрос был топикстартера не про это. У него не работает либо ошибка в выравнивании или еще чего вылезло.

Пишите ld файл правильно, а не как хочет левая нога.

Stas Koynov
Пишите ld файл правильно, а не как хочет левая ног...

Ага, ну то есть мы уже выходим за рамки C++. Сам по себе напрашивается вопрос, почему бы не написать этот код на ассемблере

артем λ
Ага, ну то есть мы уже выходим за рамки C++. Сам п...

Зачем вам ++, пишите весь код на асме, ломает меня писать даже мемкопи на асме, от слов совсем

Stas Koynov
Зачем вам ++, пишите весь код на асме, ломает меня...

Вы сейчас передёргиваете. Язык предоставляет абстракции, и порой они не вписываются в устройство конкретного исполнителя. Такова уж цена

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта