Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
Dima TSashaMercuryПару раз прочитал, не очень понятно. Почему при сортировке с использованием стандартных функций С и С++ мы можем ожидать в качестве побочного эффекта изменение сортируемых объектов? Наоборот: объекты не меняются, но должны, т.к. внутри string буфер и указатель на этот буфер. Выше пример кода который сглючит 21224926 и 21226275 Ничего там ломаться не должно: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 12:14 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
д0kХ Код: plaintext 1. 2. 3. 4. 5. 6. Так ИМХО будет оптимальнее, если стековую строку дефайнить на не менее чем на 2 машинных слова. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Не проверял . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 15:26 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
д0kХ, if (или switch) могут влиять на процессорные оптимизации, поэтому указатель желательно хранить уже вычисленным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 16:22 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
Если уж делать позиционно независимые строки, то вместо указателя можно хранить смещение к нему относительно this ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 16:25 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЕсли уж делать позиционно независимые строки, то вместо указателя можно хранить смещение к нему относительно this Вот меня удивляет, почему в gcc так не сделали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 16:40 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
д0kХНичего там ломаться не должно: Код: plaintext 1. 2. 3. 4. 5. 6. Да, так не сломается, но так работает быстрее Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 16:43 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЕсли уж делать позиционно независимые строки, то вместо указателя можно хранить смещение к нему относительно this Не поможет, т.к. для больших строк выделение памяти через malloc(), т.е. за пределами объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 16:46 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
Dima TНе поможет, т.к. для больших строк выделение памяти через malloc(), т.е. за пределами объекта. Так смещение тоже может указывать за пределы объекта ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 16:57 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
Вася УткинВот меня удивляет, почему в gcc так не сделали. Потому что такие строки все равно никому не нужны. Как выше написали все равно такое использование строк - UB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 16:59 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyд0kХ, if (или switch) могут влиять на процессорные оптимизации, поэтому указатель желательно хранить уже вычисленным. Он вычислен начало массива лежащего в стеке, преобразуется в указатель на строку через ссылку на нулевой элемент. либо из самого массива берется указатель. В зависимости от длины строки возвращается либо то либо другое. Что бы не хранить размер ( сэкономить sizeof(int) на каждом элементе массива строк в последенм примере в последнем байте массива строки фиксированной длины хранится либо 0х00 как в последеднем байте любой строки. либо 0хFF если первое слово в массие является указателем на строку. Если не то и не другое , значит кто то покоцал память . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 17:11 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
Dima Tд0kХНичего там ломаться не должно: Код: plaintext 1. 2. 3. 4. 5. 6. Да, так не сломается, но так работает быстрее Код: plaintext 1. 2. 3. 4. Быстрее оно до тех пор, пока вы не присумируете туда время 100500 вызовов new и delete для строк меньше 16 байт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 17:18 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
д0kХAnatoly Moskovskyд0kХ, if (или switch) могут влиять на процессорные оптимизации, поэтому указатель желательно хранить уже вычисленным. Он вычислен . if/switch - это и есть вычисления для предсказателя переходов, причем с учетом ошибок предсказания - это статистически очень долгие операции. Весь вопрос в том, где лучше оставить if/switch: - либо в operator char*() , как у вас - либо в operator=(), как я приводил пример и как видимо у gcc 5.1 (раз у них ломается) Что реже вызывается, там и надо оставлять. Видимо в GCC посчитали, что объект меняется реже, чем читается (или меняются только отдельные ячейки строки). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 17:26 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
Вася УткинВесь вопрос в том, где лучше оставить if/switch: - либо в operator char*() , как у вас - либо в operator=(), как я приводил пример и как видимо у gcc 5.1 (раз у них ломается) Что реже вызывается, там и надо оставлять. Видимо в GCC посчитали, что объект меняется реже, чем читается (или меняются только отдельные ячейки строки). В присвоении по любому этот if есть )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 17:43 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
Вася Уткинд0kХпропущено... Он вычислен . if/switch - это и есть вычисления для предсказателя переходов, причем с учетом ошибок предсказания - это статистически очень долгие операции. Весь вопрос в том, где лучше оставить if/switch: - либо в operator char*() , как у вас - либо в operator=(), как я приводил пример и как видимо у gcc 5.1 (раз у них ломается) Что реже вызывается, там и надо оставлять. Видимо в GCC посчитали, что объект меняется реже, чем читается (или меняются только отдельные ячейки строки). Вычислен это как минумум одно лишнее машинное слово в классе. И это где то 50 % размера строки. Сейчас оперативную память наверное никто не считает. Но мне очень кажется, что десяток тактов процессра дешевле одного машинного слова метаданных в ОЗУ . ВСЕ ИМХО Как думают создатели GCC мне не ведомо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 17:53 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
В случае со switch и расчетом на лету в кеше процессора поместится гораздо больше элементов массива строк. чем с предрасчитанным и хранящимся в отдельном поле класса указателем. по хорошему тестить надо. В топик вызывается Майтон :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 18:14 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
д0kХВася Уткинпропущено... if/switch - это и есть вычисления для предсказателя переходов, причем с учетом ошибок предсказания - это статистически очень долгие операции. Весь вопрос в том, где лучше оставить if/switch: - либо в operator char*() , как у вас - либо в operator=(), как я приводил пример и как видимо у gcc 5.1 (раз у них ломается) Что реже вызывается, там и надо оставлять. Видимо в GCC посчитали, что объект меняется реже, чем читается (или меняются только отдельные ячейки строки). Вычислен это как минумум одно лишнее машинное слово в классе. И это где то 50 % размера строки. Сейчас оперативную память наверное никто не считает. Но мне очень кажется, что десяток тактов процессра дешевле одного машинного слова метаданных в ОЗУ . ВСЕ ИМХО Как думают создатели GCC мне не ведомо. Чем новее процессор, тем в нем больше суперскалярных ALU-ports, и тем больше ALU будут простаивать при ошибке предсказания перехода. А кэш и память увеличиваются (за исключением L1), так что в перспективе думаю выгоднее больше памяти затратить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 18:15 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
Вася Уткинд0kХпропущено... Вычислен это как минумум одно лишнее машинное слово в классе. И это где то 50 % размера строки. Сейчас оперативную память наверное никто не считает. Но мне очень кажется, что десяток тактов процессра дешевле одного машинного слова метаданных в ОЗУ . ВСЕ ИМХО Как думают создатели GCC мне не ведомо. Чем новее процессор, тем в нем больше суперскалярных ALU-ports, и тем больше ALU будут простаивать при ошибке предсказания перехода. А кэш и память увеличиваются (за исключением L1), так что в перспективе думаю выгоднее больше памяти затратить. Понятное дело . Я лет 15-20 назад, когда это писал решал конкретную практическую задачу минимизации вызовов аллокации - деаллокации памяти для коротких строк. но некоторый небольшой % строк в массивах могли быть длинными. Если у автора топика есть разумное ограничение на длину строки, то задача решится достаоточно просто, без забивания саморезов микроскопом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2018, 18:34 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
Siemarglнет там грязных хаков. Да. Есть всего лишь UB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2018, 13:11 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
Ну вот Вася. А я вить предупреждал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2018, 13:29 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
maytonНу вот Вася. А я вить предупреждал. Скоро у меня будет целая секта с блекджеком и последователями ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2018, 13:44 |
|
||
|
sizeof( strcuct {string} )?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЕсли уж делать позиционно независимые строки, то вместо указателя можно хранить смещение к нему относительно this Это уже база данных. Там в блоке данных, хранящемся на диске записи хранятся как попало и пракитчески любой длины и в любом количестве . Но в блоке есть массив смещений записей от начала блока. Глобально запись адресуется номером ( смещением) блока от начала датафайла и индексом массиве блока. Эта сущьсность в БД называется rowid . Зная rowid любую запись можно достать с диска за одну операцию чтения 2-е коственных адресации . по этому принципу прострен индексный поиск в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2018, 22:06 |
|
||
|
|

start [/forum/topic.php?fid=57&gotonew=1&tid=2017950]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
76ms |
get topic data: |
11ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 295ms |
| total: | 483ms |

| 0 / 0 |
