H_C>>Какая базовая единица памяти написана в стандарте — 1 байт или sizeof(char)? К>sizeof(char) == 1 по определению.
Все-таки ты б ему уточнил, что 1 (один) в данном случае не 1 байт, а 1 char, который может и несколько байтов занимать на самом деле...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
H_C>>>Какая базовая единица памяти написана в стандарте — 1 байт или sizeof(char)? К>>sizeof(char) == 1 по определению. LVV>Все-таки ты б ему уточнил, что 1 (один) в данном случае не 1 байт, а 1 char, который может и несколько байтов занимать на самом деле...
Здравствуйте, _NN_, Вы писали: H_C>>>>Какая базовая единица памяти написана в стандарте — 1 байт или sizeof(char)? К>>>sizeof(char) == 1 по определению. LVV>>Все-таки ты б ему уточнил, что 1 (один) в данном случае не 1 байт, а 1 char, который может и несколько байтов занимать на самом деле... _NN>Точнее 1 байт это не обязательно 8 бит
Справедливое замечание.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Hard_Club, Вы писали:
H_C>Какая базовая единица памяти написана в стандарте — 1 байт или sizeof(char)?
На всякий случай позанудствую: также не забывайте, что для памяти базовая единица языка, базовая единица машинной архитектуры и базовая единица операционной системы могут отличаться.
Здравствуйте, LaptevVV, Вы писали:
LVV>Все-таки ты б ему уточнил, что 1 (один) в данном случае не 1 байт, а 1 char, который может и несколько байтов занимать на самом деле...
Я как-то работал с сигнальным процессором, у которого гарвардская архитектура с организацией памяти по 16 бит, так там char занимал одно слово (два байта), short столько же, а инт два слова, так получалось sizeof(char)=1(два байта), sizeof(short)=1, sizeof(int)=2. И вот там "веселуха" была с функциями типа memcpy, strcpy... приходилось свои писать
Здравствуйте, _NN_, Вы писали:
_NN>Точнее 1 байт это не обязательно 8 бит
А еще точнее — не меньше 8 бит:
The fundamental storage unit in the C++ memory model is the byte. A byte is at least large enough to contain any member of the basic execution character set (2.3) and the eight-bit code units of the Unicode UTF-8 encoding form and is composed of a contiguous sequence of bits, the number of which is implementation-defined.
UPD Да, эта добавка про минимум 8 бит из UTF-8 появилась в С++11, раньше ее не было и байт мог быть каким угодно, лишь бы в него влезал basic execution character set.
Здравствуйте, Abyx, Вы писали:
A>Здравствуйте, Hard_Club, Вы писали:
H_C>>Какая базовая единица памяти написана в стандарте — 1 байт или sizeof(char)?
A>Родина дала тебе стандарт. Открой стандарт, прочитай первый раздел главу 1.7 первое предложение — будешь знать что тебе надо. A>В чем твоя проблема?!
Может жалко чубаксов на покупку стандарта?
Здравствуйте, koenjihyakkei,
K>Я как-то работал с сигнальным процессором, у которого гарвардская архитектура с организацией памяти по 16 бит, так там char занимал одно слово (два байта), short столько же, а инт два слова, так получалось sizeof(char)=1(два байта), sizeof(short)=1, sizeof(int)=2. И вот там "веселуха" была с функциями типа memcpy, strcpy... приходилось свои писать
Может, на самом деле ты имел в виду sizeof(char) = 1 байту = 2 октета?
Здравствуйте, koenjihyakkei, Вы писали:
K>Я как-то работал с сигнальным процессором, у которого гарвардская архитектура с организацией памяти по 16 бит, так там char занимал одно слово (два байта), short столько же, а инт два слова, так получалось sizeof(char)=1(два байта), sizeof(short)=1, sizeof(int)=2. И вот там "веселуха" была с функциями типа memcpy, strcpy... приходилось свои писать
Сигнальники прекрасны. Вспомнилась моторола 56K, модифицированная гарвардаская архитектура, MAU 24 бит, две памяти данных X, Y. У всех указателей есть признак, на какую память указывает. Несколько уровней косвенных указателей приводили компилятор в ступор и он генерил неправильный код. Зато было 3 шины — для подтягивания инструкций и двух операндов из памяти одновременно. Мог MAC за такт делать. Ну и поддержка всякой хитрой адресации прям в железе.
H_C>>Какая базовая единица памяти написана в стандарте — 1 байт или sizeof(char)? К>sizeof(char) == 1 по определению.
Про битовые поля как то забыают, хоть и они по сути "виртуальны" но иногда и нет.
struct S {
char m:4, n:4;
};
sizeof(S) == 1
struct S {
char m:5, n:4;
};
sizeof(S) == 2
Здравствуйте, nen777w, Вы писали:
H_C>>>Какая базовая единица памяти написана в стандарте — 1 байт или sizeof(char)? К>>sizeof(char) == 1 по определению. N>Про битовые поля как то забыают, хоть и они по сути "виртуальны" но иногда и нет.
Сумма размеров членов не обязана быть равна размеру структуры. Причём, как в плюс, так и в минус: отбивки выравнивания, оптимизация пустого места.
Даже с обычными байтовыми полями, а уж с битовыми сам бог велел.
Здравствуйте, jazzer, Вы писали:
J>UPD Да, эта добавка про минимум 8 бит из UTF-8 появилась в С++11, раньше ее не было и байт мог быть каким угодно, лишь бы в него влезал basic execution character set.
На самом деле она была и раньше.
В явном виде она в стандарте С++ действительно была не прописана.
Но через ссылку на стандарт С (в котором об этом было как раз явно сказано), тем не менее, имелась в виду.
Здравствуйте, Vlad_SP, Вы писали:
V_S>Может, на самом деле ты имел в виду sizeof(char) = 1 байту = 2 октета?
Это вряд ли, если минимальная адресуемая область память кратна 8-ми битовому байту она называется не byte, а word. Если не кратна, но немаленькая тоже обычно word, а не byte.
Здравствуйте, pagid, Вы писали:
P>Это вряд ли, если минимальная адресуемая область память кратна 8-ми битовому байту она называется не byte, а word. Если не кратна, но немаленькая тоже обычно word, а не byte.
Вот первое попавшееся под руку:
Historically, the byte was the number of bits used to encode a single character of text in a computer and for this reason it is the smallest addressable unit of memory in many computer architectures. The size of the byte has historically been hardware dependent and no definitive standards existed that mandated the size. The de facto standard of eight bits is a convenient power of two permitting the values 0 through 255 for one byte.