psilogic: (Default)
[personal profile] psilogic
Такое впечатление, что x = {x} для физически существующих (т.е. допускающих регистрацию физич. приборами) множеств... если вдуматься. Для формальных (хоть аксиоматических, хоть наивных) множеств это, конечно, не так. А вот для физически существующих вещей, с которыми мы в рассуждениях оперируем как со множествами, найти разницу между x и {x} не удается. Каждый раз, когда мне кажется, что я ее нашел, дальнейшее размышление вынуждает признать, что что-нибудь не так.

Или меня глючит к ночи... ?

Date: 2006-05-05 10:26 pm (UTC)
From: [identity profile] eugenebo.livejournal.com
Э-ээ... до измерения памяти на таком уровне я уже с пару лет не опускался и могу ошибаться... Но кажется мне, что ведь и пустой массив (из нуля элементов) 4 байта уже занимает? Чисто как указатель. Место в памяти под этот указатель забито, занять его никто не может. А тогда, соответсвенно, если в массиве один элемент, то будет 8 байт уже.

Date: 2006-05-06 08:31 am (UTC)
From: [identity profile] psilogic.livejournal.com
Нет, если вот так:
static char *x="123";
- то 8 байт: под указатель x и под 4 байта строки '1','2','3','\0'.
а если так:
static char x[]="123";
- то под указатель место не отводится. В 1-м случае x можно изменить (например, x = NULL), и тогда новый измененный адрес надо будет куда-то записать (нужны 4 байта). А во втором случае компилятор запретит такое присваивание, т.к. x - константа.

Date: 2006-05-08 05:54 am (UTC)
From: [identity profile] eugenebo.livejournal.com
Таки закатал рукава и, написав немного кода, измерил всё сам. Похоже, Вы правы: и int x, и int x[1] занимают одинаково -- оба по 8 байт в MS VS 2003 по крайней мере. Надо почаще освежать память :)

Занятно, что если подобные объекты аллоцировать динамически, то int x[1] оказывается-таки на 4 байта длиннее int x[0], и при этом int x[0] места занимает всё ещё порядочно... Но статически такой объект не создаётся :)

Date: 2006-05-08 07:04 am (UTC)
From: [identity profile] psilogic.livejournal.com
чтобы статически создавался ему по идее надо приписать static и что-нибудь константное присвоить при объявлении, например:
static int x[1] = 77;
Page generated Aug. 30th, 2025 03:20 am
Powered by Dreamwidth Studios