jenya7 0 27 декабря, 2022 Опубликовано 27 декабря, 2022 · Жалоба On 12/27/2022 at 1:55 PM, Forger said: -1 байт озу делает погоду? складывается ощущение, что вся эта затея больше похоже на некий мегакостыль чего-то очень простого, что переделав сразу съэкономит и память и упростит код почему один байт? 100 генериков - 100 байт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 27 декабря, 2022 Опубликовано 27 декабря, 2022 · Жалоба 3 minutes ago, jenya7 said: 100 генериков - 100 байт. Третий спрашиваю: о какой памяти в ВАШЕМ понимании идет речь? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 27 декабря, 2022 Опубликовано 27 декабря, 2022 · Жалоба On 12/27/2022 at 2:03 PM, Forger said: Третий спрашиваю: о какой памяти в ВАШЕМ понимании идет речь? ок. взять камень с достаточным объёмом RAM это тоже вполне себе решение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 27 декабря, 2022 Опубликовано 27 декабря, 2022 · Жалоба 2 minutes ago, jenya7 said: ок. взять камень с достаточным объёмом RAM это тоже вполне себе решение. По ходу вы вообще не понимаете как и где "тратится" память. Разберитесь для начала хотя бы с этим. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 27 декабря, 2022 Опубликовано 27 декабря, 2022 · Жалоба On 12/27/2022 at 2:14 PM, Forger said: По ходу вы вообще не понимаете как и где "тратится" память. Разберитесь для начала хотя бы с этим. typedef struct { uint8_t type; void *v; } FOO; FOO foos[100]; foos[1].type = IS_INT; foos[1].v = &val; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 27 декабря, 2022 Опубликовано 27 декабря, 2022 · Жалоба 9 minutes ago, jenya7 said: typedef struct { uint8_t type; void *v; } FOO; FOO foos[100]; foos[1].type = IS_INT; foos[1].v = &val; Вот, уже хоть какая доп. информация! Увы, ее приходится вытягивать клещами Если делать "в лоб", как у вас в примере, то действительно минус 100 байт RAM. По существу нет никакого смысла хранить type в RAM. Для этого куда больше подходит ROM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 27 декабря, 2022 Опубликовано 27 декабря, 2022 (изменено) · Жалоба On 12/27/2022 at 2:38 PM, Forger said: Вот, уже хоть какая доп. информация! Увы, ее приходится вытягивать клещами Если делать "в лоб", как у вас в примере, то действительно минус 100 байт RAM. По существу нет никакого смысла хранить type в RAM. Для этого куда больше подходит ROM. ROM это уже другая история 🙂 мне интересно почему компайлер не позволяет переопределить тип (uint8_t *)generic = &flag[4]; что в этом несбыточного. Изменено 27 декабря, 2022 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex11 6 27 декабря, 2022 Опубликовано 27 декабря, 2022 · Жалоба Quote почему компайлер не позволяет переопределить тип Потому что потом он не сможет понять к какому типу данных обращаться в данный момент при исполнении. Да и я не могу понять, зачем Вам это нужно. Если это параметр функции, то без указания что Вы ей подсунули в конкретном вызове никто не разберется указатель на что следует использовать. А если есть где-то указание на тип, то этим можно пользоваться в тексте программы и в соответствующем ветвлении ставить преобразование типра к нужному. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 45 27 декабря, 2022 Опубликовано 27 декабря, 2022 · Жалоба 2 hours ago, jenya7 said: как мне одним параметром сообщить У тебя есть два путЯ. Первый. Передавать параметр в виде строки текста, например, так: "%b 123" "%i -12345" Второй. Использовать для компиляции С++, используя или перегруженную функцию, или шаблон, который сгенерирует функции для нужных типов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 27 декабря, 2022 Опубликовано 27 декабря, 2022 · Жалоба On 12/27/2022 at 3:16 PM, tonyk_av said: У тебя есть два путЯ. Первый. Передавать параметр в виде строки текста, например, так: "%b 123" "%i -12345" Второй. Использовать для компиляции С++, используя или перегруженную функцию, или шаблон, который сгенерирует функции для нужных типов. А что С++ генерик тип <T> не отжирает память? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndyBig 8 27 декабря, 2022 Опубликовано 27 декабря, 2022 · Жалоба 4 hours ago, jenya7 said: можно было сделать так int size = sizeof(generic); if (size == 1) (*((uint8_t *)generic)) = val; else (*((int *)generic)) = val; Нельзя, потому что sizeof(generic) всегда будет возвращать одно и то же значение, равное размеру адреса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 27 декабря, 2022 Опубликовано 27 декабря, 2022 (изменено) · Жалоба думал так typedef struct { union { char *cp; int *ip; double *dp; } v; } FOO; FOO foos[100]; foos[1].v.cp = &val; но sizeof(v) всё равно будет 4? он возьмёт по большему члену. а может по размеру переменной? if (val < 256) (*((uint8_t *)generic)) = val; else (*((int *)generic)) = val; по любому правильно расположится в памяти. Изменено 27 декабря, 2022 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gridinp 3 27 декабря, 2022 Опубликовано 27 декабря, 2022 · Жалоба В 27.12.2022 в 16:24, jenya7 сказал: А что С++ генерик тип <T> не отжирает память? отжирает, только вместо байта imho отожрёт указатель на информацию о типе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 27 декабря, 2022 Опубликовано 27 декабря, 2022 · Жалоба 6 minutes ago, jenya7 said: но sizeof(v) всё равно будет 4? он возьмёт по большему члену. возможно и все 8 байт (если double 8-байтный) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndyBig 8 27 декабря, 2022 Опубликовано 27 декабря, 2022 · Жалоба 1 hour ago, jenya7 said: а может по размеру переменной? А смысл? Память все равно при этом никак не экономится. Какая разница что помещать в эти 4(8) байт юниона - однобайтовое значение или четырехбайтовое? Все равно в памяти будет занят фиксированный размер, равный размеру наибольшего члена. И, честно говоря, я так и не понял какой цели нужно достичь с помощью всего этого колдунства. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться