|
модификатор const. Как правильно использовать в Си |
|
|
|
Dec 22 2017, 15:39
|
Знающий
   
Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748

|
где компилятор должен расположить "переменные" такого вида: CODE // Описано глобально const u8 x_pos[][8] = { {50, 60}, {55, 62, 69, 76, 83, 90, 97, 104}, {76}, {76}, }; то же самое, описано внутри функции и то же самое внутри функции CODE static const u8 x_pos[][8] = { {50, 60}, {55, 62, 69, 76, 83, 90, 97, 104}, {76}, {76}, };
у меня есть неизменяемый массив большого размера и при входе в функцию этот констатный масив создается в стеке. если его не определить как static правильно ли это поведение или нет? в первом варианте в глобальной константе этот массив помещен в память Flash. Правильное поведение. Во втором варианте в стек - неправильное в третьем варианте во Flash память.
|
|
|
|
|
 |
Ответов
|
Jan 29 2018, 07:45
|
Местный
  
Группа: Свой
Сообщений: 278
Регистрация: 18-01-05
Из: Санкт-Петербург
Пользователь №: 2 031

|
Цитата в первом варианте в глобальной константе этот массив помещен в память Flash. Правильное поведение.
Во втором варианте в стек - неправильное в третьем варианте во Flash память. По сути первый и третий вариант в вашем случае идентичны и отличаются они только областью видимости, поэтому логично, что один и тот же компилятор делает в этих вариантах одно и то же. Второй вариант отличается тем, что массив живет только во время вызова функции, поэтому запихивать его пожизненно во флэш нелогично. Цитата На много интереснее попросить привести примеры где именно массив поведет себя иначе чем указатель и наоборот. К имени массива привязан не только адрес, но и размер. Как уже писали выше размеры массива и указателя не равны. Код #include <iostream> using namespace std; uint32_t na[] = {0,1}; uint32_t *a = na;
int main() { if(sizeof(a) == sizeof(na)) cout << "equal"; else cout << "not equal"; // your code goes here return 0; } Еще пример когда в качестве параметра передается ссылка на массив, в этом случае указатель в качестве параметра не пройдет. Цитата void func(uint32_t (&na)[2])
|
|
|
|
Сообщений в этой теме
inventor модификатор const. Как правильно использовать в Си Dec 22 2017, 15:39 Kabdim rtfm, очень нужно почитать умную книжку по языку н... Dec 22 2017, 16:01 inventor Цитата(Kabdim @ Dec 22 2017, 19:01) Вмест... Dec 22 2017, 16:21  demiurg_spb Цитата(inventor @ Dec 22 2017, 19:21) мож... Dec 22 2017, 16:29  Kabdim Цитата(inventor @ Dec 22 2017, 19:21) мож... Dec 22 2017, 17:00   demiurg_spb Цитата(Kabdim @ Dec 22 2017, 20:00)
Согл... Dec 22 2017, 17:07    Kabdim Цитата(demiurg_spb @ Dec 22 2017, 20:07) ... Dec 23 2017, 19:41     DASM Цитата(Kabdim @ Dec 23 2017, 22:41) Верно... Dec 23 2017, 20:24    juvf Цитата(demiurg_spb @ Dec 22 2017, 22:07) ... Dec 24 2017, 17:36     DASM Цитата(juvf @ Dec 24 2017, 20:36) Что так... Dec 24 2017, 19:04      razrab83 Цитата(DASM @ Dec 24 2017, 20:04) const н... Dec 25 2017, 03:10       Quasar Цитата(razrab83 @ Dec 25 2017, 06:10) А п... Dec 30 2017, 09:04        razrab83 Цитата(Quasar @ Dec 30 2017, 09:04) Локал... Jan 3 2018, 10:26         Quasar Цитата(razrab83 @ Jan 3 2018, 13:26) Лока... Jan 3 2018, 22:06      juvf Цитата(DASM @ Dec 25 2017, 00:04) const н... Dec 25 2017, 03:34     demiurg_spb Цитата(juvf @ Dec 24 2017, 20:36) Что так... Dec 25 2017, 14:08      juvf ЦитатаСогласно стандарту языка Си константные данн... Dec 25 2017, 16:28       demiurg_spb С вами бесполезно разговаривать - это Вы к AVR и f... Dec 26 2017, 12:03        juvf Цитата(demiurg_spb @ Dec 26 2017, 17:03) ... Dec 27 2017, 02:57         demiurg_spb Цитата(juvf @ Dec 27 2017, 05:57) Пусть g... Dec 27 2017, 10:12          juvf Цитата(demiurg_spb @ Dec 27 2017, 15:12) ... Dec 27 2017, 10:49           demiurg_spb Цитата(juvf @ Dec 27 2017, 13:49) Изменил... Dec 27 2017, 10:53 Raven А разве не должен компилятор помещать глобальные и... Dec 22 2017, 16:53 demiurg_spb Цитата(Raven @ Dec 22 2017, 19:53) Нет не... Dec 22 2017, 16:56 k155la3 Цитата(Raven @ Dec 22 2017, 19:53) А разв... Dec 23 2017, 12:07 inventor то есть для того что бы константные данные
легли в... Dec 23 2017, 18:03 DASM еще как указание. статик в теле фции размещается н... Dec 25 2017, 07:31 juvf Цитата(DASM @ Dec 25 2017, 12:28) еще как... Dec 25 2017, 07:57  Kabdim Цитата(juvf @ Dec 25 2017, 10:57) его раз... Dec 25 2017, 08:02  DASM Цитата(juvf @ Dec 25 2017, 10:57) пф.... ... Dec 25 2017, 08:15   juvf Цитата(DASM @ Dec 25 2017, 13:15) вытекае... Dec 25 2017, 08:17 inventor наверное в следующих стандартах Си это
можно было... Dec 25 2017, 08:36 ViKo Все, что описал топикстартер в начале темы, верно.... Dec 25 2017, 09:46 Сергей Борщ Вообще-то в GCC в режиме С (без плюсов) уже года д... Dec 25 2017, 14:48 demiurg_spb Цитата(Сергей Борщ @ Dec 25 2017, 17:48) ... Dec 25 2017, 14:53 inventor Цитата(Сергей Борщ @ Dec 25 2017, 17:48) ... Dec 25 2017, 16:12 Kabdim Демиург, вы переоцниваете значимость техникал репо... Dec 27 2017, 13:23 demiurg_spb Время покажет. Факт есть факт - в gcc уже реализов... Dec 27 2017, 13:24 inventor мдя
задал простой вопрос
и как всегда разгорелся с... Dec 27 2017, 14:34 pnp_mechanic Вставлю и я свои 5 коп.
Inventor, всегда можно пос... Dec 27 2017, 15:14 aiwa Цитата(inventor @ Dec 25 2017, 10:36) ...... Dec 27 2017, 16:08 sigmaN Про применение volatile const для read only регист... Jan 1 2018, 18:44 Quasar Цитата(sigmaN @ Jan 1 2018, 21:44) Про пр... Jan 2 2018, 08:55  DASM Цитата(Quasar @ Jan 2 2018, 11:55) Я в св... Jan 25 2018, 17:09   esaulenka Цитата(DASM @ Jan 25 2018, 20:09) Еще бы... Jan 27 2018, 09:35    DASM Цитата(esaulenka @ Jan 27 2018, 12:35) Пр... Jan 27 2018, 11:25   Quasar ЦитатаПривидите плиз пример когда volatile const н... Jan 28 2018, 09:14    sidy Цитата(Quasar @ Jan 28 2018, 12:14) В C++... Jan 29 2018, 06:52 sigmaN Кодint f(int a )
{
const int c = 5;
return... Jan 3 2018, 10:53 razrab83 ЦитатаПеременная c вообще не займет никакой памяти... Jan 3 2018, 13:47 sigmaN Ну так мы же про размещение данных говорим вроде к... Jan 3 2018, 18:26 razrab83 Цитата(sigmaN @ Jan 3 2018, 18:26) Тоже с... Jan 4 2018, 08:50  Quasar Цитата(razrab83 @ Jan 4 2018, 11:50) 2Qua... Jan 4 2018, 21:57 inventor читаю pdf на IAR
такой забавный пример с константа... Jan 25 2018, 11:54 sigmaN Правильно, потому что это __ramfunc и никто не хоч... Jan 25 2018, 14:36 demiurg_spb Цитата(sigmaN @ Jan 25 2018, 17:36) Если ... Jan 25 2018, 15:26 krux IAR сделан не только под миниатюрные микроконтролл... Jan 25 2018, 16:40 demiurg_spb Цитата(krux @ Jan 25 2018, 19:40) приведе... Jan 26 2018, 11:12 sigmaN ЦитатаПравильно, потому что это __ramfunc и никто ... Jan 25 2018, 20:20 Сергей Борщ Не знаю, что он нынче делает в C, а в плюсах новый... Jan 27 2018, 20:24 DASM Цитата(Сергей Борщ @ Jan 27 2018, 23:24) ... Jan 27 2018, 20:38 Arlleex Ну, чтобы совсем подлить масла в огонь, можно вбро... Jan 28 2018, 17:09 DASM Цитата(Arlleex @ Jan 28 2018, 20:09) Ну, ... Jan 28 2018, 17:44 sigmaN Кодint arr[2] = {0, 1};
int i;
int pi;
in... Jan 28 2018, 19:50 gerber Цитата(sigmaN @ Jan 28 2018, 22:50) Брэйк... Jan 28 2018, 20:03  DASM Цитата(gerber @ Jan 28 2018, 23:03) Не ср... Jan 28 2018, 20:40 alx.bilous Цитата(sigmaN @ Jan 28 2018, 22:50) На мн... Jan 28 2018, 21:31 Kabdim Цитата(sigmaN @ Jan 28 2018, 22:50) Кто о... Jan 29 2018, 08:19  DASM Цитата(Kabdim @ Jan 29 2018, 11:19) Даже ... Jan 29 2018, 15:04   Quasar Цитата(DASM @ Jan 29 2018, 18:04) +++... Jan 30 2018, 05:16 sigmaN Я думаю стоит сконцентрироваться на работе с масси... Jan 28 2018, 20:51 Quasar Цитата(sigmaN @ Jan 28 2018, 23:51) Ответ... Jan 28 2018, 21:15 DASM Ну имя массива это не lvalue , нельзя записать ... Jan 28 2018, 21:34 alx.bilous Мне и правда нужно было упоминать что строка девят... Jan 28 2018, 21:38 Arlleex ЦитатаНа много интереснее попросить привести приме... Jan 29 2018, 05:42   juvf Цитата(ViKo @ Jan 29 2018, 17:21) Во флэш... Jan 29 2018, 16:01 sigmaN Кодint (*ptr)[2];
Скомпилится?
ptr... Jan 29 2018, 15:46 DASM Цитата(sigmaN @ Jan 29 2018, 18:46) Кодin... Jan 29 2018, 15:55 Arlleex Цитата(sigmaN @ Jan 29 2018, 18:46) Кодin... Jan 29 2018, 19:35 DASM delete Jan 29 2018, 16:37 sigmaN А вот это я расшифровать пока не могу
Озвучу мыс... Jan 29 2018, 21:07 Arlleex Цитата(sigmaN @ Jan 30 2018, 00:07) А вот... Jan 29 2018, 21:14  DASM Цитата(Arlleex @ Jan 30 2018, 00:14) Ну, ... Jan 29 2018, 21:20   Arlleex Цитата(DASM @ Jan 30 2018, 00:20) Ну блин... Jan 29 2018, 21:27    DASM Цитата(Arlleex @ Jan 30 2018, 00:27) Вам ... Jan 29 2018, 21:34     Arlleex Цитата(DASM @ Jan 30 2018, 00:34) Вот пос... Jan 29 2018, 21:57  dxp Цитата(Arlleex @ Jan 30 2018, 04:14) P.S.... Jan 30 2018, 05:14   Arlleex Цитата(dxp @ Jan 30 2018, 08:14) func - н... Jan 30 2018, 06:37    DASM Цитата(Arlleex @ Jan 30 2018, 09:37) логи... Jan 30 2018, 08:00    dxp Цитата(Arlleex @ Jan 30 2018, 13:37) Вы н... Jan 30 2018, 09:08     Arlleex Цитата(dxp @ Jan 30 2018, 12:08) char (*(... Jan 30 2018, 10:38  Quasar Цитата(Arlleex @ Jan 30 2018, 00:14) P.S.... Jan 30 2018, 09:11 sigmaN Цитатаfunc - это функция, не принимающая аргументо... Jan 29 2018, 21:31 DASM "кому-то еще и поддерживать." и 99 % это... Jan 29 2018, 22:09 ViKo Мудреные конструкции наподобие вышеприведенных раз... Jan 30 2018, 05:07 DASM "поплачИтесь" ,- непременно
Цитата(dxp ... Jan 30 2018, 06:04 Quasar Цитата(DASM @ Jan 30 2018, 09:04) "п... Jan 30 2018, 07:49
2 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|