Производительность строк C с NUL-концевыми символами, которые не начинаются с 4- или 8-байтовой границы в 32- и 64-разрядных системах x86? - PullRequest
0 голосов
/ 24 июня 2019

Я думаю о том, чтобы сохранить общее количество символов, скажем, 100 000 очень коротких строк (20 000 строк по 1-10 символов, но много по 4 символа) в одном большом длинном буфере, который я выделяю один раз. (Это своего рода план для строк с подсчетом ссылок без подсчета ссылок.)

Программа будет иметь рабочий набор объемом 20–60 МБ, поэтому кэш стоит дорого, и я узнал, что уменьшение необработанного числа страниц памяти также помогает кешу. Он будет работать на хороших рабочих станциях или серверах x86.

Есть ли сильное ощущение, что, когда я помещаю эти строки в буфер, скорость улучшится, если я сделаю это для выравниваний в 4 или 8 байтов? Я думаю, это может увеличить объем используемой памяти на 50-75%, сократив количество попаданий в кэш. С другой стороны, такие функции, как strcmp(), snprintf() и т. Д., Будут значительно быстрее с выровненными строками?

Мое лучшее предположение, что это серая область, и ее нужно будет протестировать в определенном приложении. ОТО, спрашивая время, я не знаю достаточно, чтобы точно знать, что это серая зона; возможно, мнение явно выражается в сторону меньшего или более выровненного.

...