powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Различные структуры данных. Реализация
25 сообщений из 422, страница 5 из 17
Различные структуры данных. Реализация
    #38877648
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyegorych,

Что, жестче чем malloc(sizeof(struct temp) + sizeof(T2)*N) ? :)через union позаковырестей, чем malloc, всё же :))
А где используются такого рода извращения, интересно?

и, мне кажется, что
Код: plaintext
1.
2.
3.
4.
union {
struct temp t;
char fill[sizeof(struct temp) + sizeof(T2)*N];
};

если N - не константа, то это ведь нестандартное расширение гнуса, нет?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38877814
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychесли N - не константа, то это ведь нестандартное расширение гнуса, нет?
Это стандартное, но только в С.
В С++ такого нет
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38878167
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlegorychWhite Owl,
>> не забывай что sizeof(struct temp) == sizeof(T0)+sizeof(T2);
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
struct temp
{
    T0 count;
    T1 smth_else;
    T2 will_allocate_memory[0];
}
 
sizeof(struct temp) == sizeof(T0)+sizeof(T1);

T1, а не T2?Да, конечно. Опечатался, прошу прощения.

а не
Код: plaintext
1.
 sizeof(T0)+sizeof(T1)+sizeof(T2)



?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38878172
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем вообще хранить структуру переменной длинны ? Где это можно применить, например ?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38878174
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему бы не хранить в таком случае указатель на память, где будет храниться необходимые нам данные разной мощности
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38878181
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury а не

нет.

SashaMercury Где это можно применить, например ?

разбор пакетов, скажем: заголовок + данные переменной длины.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38878207
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot RWolf]SS а не

нет.


почему нет ?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38878219
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryпочему нет ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
C:\2>type 1.c
#include <stdio.h>

struct temp
{
    char count;
    char smth_else;
    char will_allocate_memory[0];
};

int main(int argc, char* argv[])
{
  printf("%d\r\n", sizeof(struct temp));
  return 0;
}

C:\2>gcc 1.c

C:\2>a
2

C:\2>
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38878222
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolf,

и что ?
эти 2 могут получиться разными путями.

почему ?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38878223
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

не могут.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38878248
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolf,

тогда в данном случае это скорее сумма размеров T0 и T1. Объясните почему должна быть сумма T0 и T2, и почему в размере структуры не учитывается размер T1
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38878254
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

в посте так и написано:
Код: plaintext
1.
sizeof(struct temp) == sizeof(T0)+sizeof(T1);
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38878263
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych , потому я и спросил по этому вопросу. T1 исправили на T2.

White OwlegorychWhite Owl,
>> не забывай что sizeof(struct temp) == sizeof(T0)+sizeof(T2);
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
struct temp
{
    T0 count;
    T1 smth_else;
    T2 will_allocate_memory[0];
}
 
sizeof(struct temp) == sizeof(T0)+sizeof(T1);

T1, а не T2?Да, конечно. Опечатался, прошу прощения.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38878264
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryRWolf,

тогда в данном случае это скорее сумма размеров T0 и T1. Объясните почему должна быть сумма T0 и T2, и почему в размере структуры не учитывается размер T1смотри, чё: 17252093
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38878275
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryegorych , потому я и спросил по этому вопросу. T1 исправили на T2.наоборот, Т2 исправили на Т1, изначально вкралась опечатка. Правильный sizeof:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
struct temp
{
    T0 count;
    T1 smth_else;
    T2 will_allocate_memory[0];
}
 
sizeof(struct temp) == sizeof(T0)+sizeof(T1);

sizeof( T2 ) не участвует в расчёте размера структуры, потому что мы говорим, что будет массив переменной длины, и, типа, мы сами-с-усами и зададим потом правильный размер. Компилятор говорит нам: Ок, теперь ты сам-себе-злобный-буратино, а я не буду учитывать размер последнего массива при расчёте размера структуры.
Как то так мне это видится ))
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38878294
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychSashaMercuryegorych , потому я и спросил по этому вопросу. T1 исправили на T2.наоборот, Т2 исправили на Т1, изначально вкралась опечатка. Правильный sizeof:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
struct temp
{
    T0 count;
    T1 smth_else;
    T2 will_allocate_memory[0];
}
 
sizeof(struct temp) == sizeof(T0)+sizeof(T1);

sizeof( T2 ) не участвует в расчёте размера структуры, потому что мы говорим, что будет массив переменной длины, и, типа, мы сами-с-усами и зададим потом правильный размер. Компилятор говорит нам: Ок, теперь ты сам-себе-злобный-буратино, а я не буду учитывать размер последнего массива при расчёте размера структуры.
Как то так мне это видится ))

Мне так и думалось. Спасибо :)
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38878668
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychSashaMercuryegorych , потому я и спросил по этому вопросу. T1 исправили на T2.наоборот, Т2 исправили на Т1, изначально вкралась опечатка. Правильный sizeof:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
struct temp
{
    T0 count;
    T1 smth_else;
    T2 will_allocate_memory[0];
}
 
sizeof(struct temp) == sizeof(T0)+sizeof(T1);

sizeof( T2 ) не участвует в расчёте размера структуры, потому что мы говорим, что будет массив переменной длины, и, типа, мы сами-с-усами и зададим потом правильный размер. Компилятор говорит нам: Ок, теперь ты сам-себе-злобный-буратино, а я не буду учитывать размер последнего массива при расчёте размера структуры.
Как то так мне это видится ))
sizeof(struct temp) не всегда равно sizeof(T0)+sizeof(T1), есть ещё выравнивание
Такой вид структур-хаков довольно распространён. В дельфях, например, встроенные типы String, Array of имеют такую же структуру, это помогает избегать лишнего выделения памяти и наверное благоприятно сказывается на скорости, из-за того что данные в одном месте (кэш процессора не перегружается)
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38879925
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До кучи. Статья на тему

http://tproger.ru/translations/art-of-structure-packing/
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38881311
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
В Си отсутствует перегрузка функций ? (это относится к структурам, проектирую дерево, и возник такой вопрос). Почему отсутствует ?

PS
Марк, а хорошая статья. Читаю сейчас, нравится.
Странно, у меня на столе лежит Цилькер, Орлов Организация ЭВМ и систем, и я почему-то не нашел у них про так называемое выравнивание
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38881872
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryПочему отсутствует ?Потому, что компоновщик не понимает такого авангарда как одно имя у двух точек входа.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38882041
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЗдравствуйте.
В Си отсутствует перегрузка функций ? (это относится к структурам, проектирую дерево, и возник такой вопрос). Почему отсутствует ?
А для понимания этих вопросов надо читать Michael Scott, Programming Language Pragmatics.

SashaMercuryPS
Марк, а хорошая статья. Читаю сейчас, нравится.
Странно, у меня на столе лежит Цилькер, Орлов Организация ЭВМ и систем, и я почему-то не нашел у них про так называемое выравниваниеА это кто такие? Мировой общественности эти имена не известны.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38882050
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryСтранно, у меня на столе лежит Цилькер, Орлов Организация ЭВМ и систем, и я почему-то не нашел у них про так называемое выравнивание
страница 80
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38882079
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryСтранно, у меня на столе лежит Цилькер, Орлов Организация ЭВМ
Ну ты... дал джазу.

У меня при слове ЭВМ начинается когнитивный диссонанс и раскаты смеха. Еще-бы написали "табулятор". Или счётная "машинка".
Честно скажу я нечитал этих замечательных людей. Но сам факт заимствования терминологии из середины 20-го века
доставляет. Ну да бох с ними.

Вобщем обхохтался... Фух.

Вобщем я за 30 секунд тебе нагуглил:

Кури ключевые слова padding .

http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38882086
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВ Си отсутствует перегрузка функций ? (это относится к структурам, проектирую дерево, и возник такой вопрос). Почему отсутствует ?
Basil A. SidorovПотому, что компоновщик не понимает такого авангарда как одно имя у двух точек входа.
Никаких технических причин для этого нет.
С++ например использует тот же компоновщик, и это не мешает ему иметь перегрузки.

Единственная причина по которой в С нет перегрузок - это консервативность разработчиков языка, которые по максимуму охраняют синтаксис и простоту языка.
И в принципе их можно понять. Снобизм вообще понятная штука ))
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38882088
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyС++ например использует тот же компоновщик, и это не мешает ему иметь перегрузкиТолько потому, что компоновщику совершенно по барабану как именно компилятор задекорирует имя. Одно имя на две точки входа он (компоновщик) всё равно не умеет.
...
Рейтинг: 0 / 0
25 сообщений из 422, страница 5 из 17
Форумы / C++ [игнор отключен] [закрыт для гостей] / Различные структуры данных. Реализация
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]