Почему приведение указателей к `void*` уменьшает размер двоичного файла?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему приведение указателей к `void*` уменьшает размер двоичного файла?

Сообщение Anonymous »

Двоичный размер может косвенно влиять на производительность из-за использования кэша.
Я написал этот фрагмент кода, чтобы выяснить, будут ли компиляторы складывать идентичный код шаблона (в данном случае сортировка указателей).

Код: Выделить всё

#include 
#include 
#include 

#define CAST 1

template
void f() {
std::size_t n = 1024;

T** v = (T**)std::malloc(n * sizeof(T*));

for(std::size_t i = 0; i < n; ++i) {
v[i] = (T*)std::malloc(sizeof(T));
*v[i] = T{};
}

#if CAST
std::sort((void**)v, (void**)(v + n));
#else
std::sort(v, v + n);
#endif

std::printf("%p, %p\n", v[0], v[n-1]);

for(std::size_t i = 0; i < n; ++i) {
v[i]->~T();
std::free(v[i]);
}

std::free(v);
}

int main() {
std::printf("CAST = %d\n", CAST);
f();
f();
f();
f();
f();
f();
f();
f();
}
Я компилирую его с помощью -O3, а затем удаляю двоичный файл. Интересно, что сгенерированный двоичный размер зависит от того, приводятся ли указатели к void* перед сортировкой. Особенно для Clang++ двоичный файл намного меньше.



CAST
G++ 12
Clang++ 15




false
22 КБ
35 КБ


истина
18 КБ
19 КБ



Это странно, потому что можно подумать, что если sort встроен, сгенерированный машинный код не должен зависеть от CAST. Но если он не встроен, то компилятор должен заметить, что несколько функций sort имеют одинаковый машинный код, и сложить их в один.
Но, видимо, это не так. случаться. Интересно, почему?

Подробнее здесь: https://stackoverflow.com/questions/791 ... inary-size
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему приведение указателей к `void*` уменьшает размер двоичного файла?
    Anonymous » » в форуме C++
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Приведение кортежа <int *, int, int, int*> к tuple<void*, int, int, void*> вызывает проблему использования стека ASAN за
    Anonymous » » в форуме C++
    0 Ответы
    126 Просмотры
    Последнее сообщение Anonymous
  • Неверное преобразование из «void*» в «void*(*) (void*)’ c ++?
    Anonymous » » в форуме C++
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Pytorch Global Pruning не уменьшает размер модели.
    Anonymous » » в форуме Python
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Chrome инъецирует некоторую таблицу стилей во всплывающем пользовательском интерфейсе, что уменьшает размер шрифта до 75
    Anonymous » » в форуме CSS
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»