LINUX.ORG.RU

Ответ на: комментарий от anonymous

Re^2: [C] Как в compile-time проверить размер указателя?

> typedef int check[(int) sizeof(uint64_t) - (int) sizeof(void*)];

Работает, спасибо. А можно чтоб ещё и более-менее вменяемая диагностика выводилась?

gaa ★★
() автор топика

Если make используется, то просто скомпили и запусти программулину, которая все скажет:

main: check $(OBJ)
        $(CC) ...

check: checkSize.o
        $(CC) -o checkSize checkSize.o
        ./checkSize


а файл checkSize.c такой:

#include <stdio.h>
#include <stdint.h>

int main(void)
{
   if( sizeof(void*) <= sizeof(uint64_t) )
      return 0;
   printf("Hrenovaya arhitektura!\n");
   return 1;
}

Die-Hard ★★★★★
()
Ответ на: комментарий от anonymous

Вика да еще на английском это конечно авторитетный источник по ссылке я прочитал:

There are currently no mainstream general-purpose processors built to operate on 128-bit integers or addresses, though a number of processors do operate on 128-bit data.

koTuk
()
Ответ на: комментарий от koTuk

> Вика да еще на английском это конечно авторитетный источник по ссылке я прочитал:

Новичок детектед!

anonymous
()
Ответ на: комментарий от dilmah

Я не понимаю по испански :) может просто по русски приведете пример процессора у которого sizeof(void*) будет больше 8 байт :)

koTuk
()
Ответ на: комментарий от koTuk

это не обязательно процессор. Например, возможно, что компилятор в debug-режиме запихивает дополнительную инфу в указатели.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

>Например, возможно, что компилятор в debug-режиме запихивает дополнительную инфу в указатели.

Тоесть получается в debug режиме размер указателя может отличаться от размера в релизе ?

koTuk
()
Ответ на: комментарий от koTuk

> Тоесть получается в debug режиме размер указателя может отличаться от размера в релизе ?

ну, не спорю, что так вряд ли будут делать на практике, найдут место где хранить эту доп.инфу и без увеличения указателя. Но, тем не менее, если создатели компилятора увеличат указатель, то они не нарушат стандарт.

dilmah ★★★★★
()
Ответ на: комментарий от koTuk

Re^2: [C] Как в compile-time проверить размер указателя?

> А разве уже бывает так что не выполняется ?

Ну у меня на amd64 выполняется равенство. А вообще, это просто из соображений красивости.

gaa ★★
() автор топика
Ответ на: комментарий от Die-Hard

Re^4: [C] Как в compile-time проверить размер указателя?

> Если make используется, то просто скомпили и запусти программулину, которая все скажет:

Ну у меня это в оснойной программе вставлено. Умный компилятор на "плохой" системе сократит её как раз до check.c :)

gaa ★★
() автор топика
Ответ на: комментарий от dilmah

Ладно - спор ни о чем, если хочется пусть проверяет :) Счас вон nvidia и ati свои sdk выпустили - там у них на графических процессорах все может быть.

koTuk
()
Ответ на: комментарий от dilmah

> Но, тем не менее, если создатели компилятора увеличат указатель, то они не нарушат стандарт.

А так кто-нибудь делает?

Мне кажется, что вряд ли, потому что стандарт они может и не нарушат, но создадут кучу проблем с совместимостью debug и релиз режима работы, хотя бы потому что возможно значительное увеличение расхода памяти, если в программе хранятся массивы указателей.

anonymous_incognito ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.