|
|
  |
С++ или С, что лучше для LPC? |
|
|
|
Jan 29 2009, 11:57
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 9-01-09
Пользователь №: 43 070

|
Не хотелось влезать в столь жаркую беседу со своими глупыми вопросами, но придется  Раньше писала под винду, на крайняк под дос в bc 3.1. Сейчас пишу в Cross Studio для LPC2214. Возникла непонятки: мне говорили, что без крайней необходимости не стоит писать в с++, лучше в с. У меня есть хедер с кучей констант. Был написал как для с++ как Код const int CP_BUFSIZE = 4095; const char CP_CANCEL[] = "CANCEL"; Для си переписала так: Код static const char CP_BUFSIZE = 4095; static const char CP_CANCEL[] = "CANCEL"; Правильно ли это? Будет ли они занимать место? или подставляться просто значения как при define будут? Потом компилю, смотрю memory usage: показывает свободно 4.4 Кб, делаю простенькую прогу Код char *s = NULL; int k = 600; do { printf("malloc %i bytes...", k); s = (char*) malloc(k++); if (s) { printf("ok\n"); free(s); } else printf("err\n"); } while (s); printf("exit!\n"); return 1; Она уже после 621 байта выделить не может. Как объяснить? Повлияет ли быстродействие, когда я для экономии, вместо массива int, объявлю массив unsigned short int? при условии, что реально я там буду юзать данные <= 65535. А так же повлияет ли на скорость работы, когда буду писать-читать данные или из статического массива или из куска данных, выделенных malloc? Модератор. Данная ветка была выделена в отдельный топик из другой темы по просьбе ее (другой темы) топикстартера.
|
|
|
|
|
Jan 29 2009, 12:18
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Да, тяжелый случай. Цитата Будет ли они занимать место? или подставляться просто значения как при define будут? Будто бы "просто подставляемые значения" в программу поступают из внеземного эфира? Они тоже где-то должны "лежать", т.е. занимать место в памяти.
|
|
|
|
|
Jan 29 2009, 12:50
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(YChebisheva @ Jan 29 2009, 14:57)  По пунктам 1. #define CP_BUFSIZE 4095 2. На быстродействие short повлияет 3. Все равно, что статический, что через malloc, кроме случая Код a = array[2]; - компилятор это соптимизирует, если у нас статический массив.
|
|
|
|
|
Jan 29 2009, 12:51
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 9-01-09
Пользователь №: 43 070

|
sergeeff, вопрос в другом - когда именно они подставляются? Или может я ошибаюсь и неправильно понимаю, как в простом си используется define? И что, если я определил хоть 10 тысяч дефайнов, в памяти, после линковки они занимать место не будут? _Pasha, а как объявить строку-чар константу?
Сообщение отредактировал YChebisheva - Jan 29 2009, 12:53
|
|
|
|
|
Jan 29 2009, 15:45
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Цитата(YChebisheva @ Jan 29 2009, 07:51)  sergeeff, вопрос в другом - когда именно они подставляются? Или может я ошибаюсь и неправильно понимаю, как в простом си используется define? И что, если я определил хоть 10 тысяч дефайнов, в памяти, после линковки они занимать место не будут? _Pasha, а как объявить строку-чар константу? #define - директива прекомпилятора. Место занимать не должно. Например #define ABC "Vasia Pupkin" если нигде в теле программы ABC нет, значит и место занимать не будет static const char - место занимать будет даже если не используется. Правда, мож оптимизатор выбросит?
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
Jan 29 2009, 15:49
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(YChebisheva @ Jan 29 2009, 14:51)  когда именно они подставляются? Или может я ошибаюсь и неправильно понимаю, как в простом си используется define? И что, если я определил хоть 10 тысяч дефайнов, в памяти, после линковки они занимать место не будут? Подставляются на этапе компиляции. Да хоть 100000 дефайнов - происходит простая текстовая подстановка Код #define SIZE 10 char a[SIZE]; // <-char a[10]
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 29 2009, 15:50
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(YChebisheva @ Jan 29 2009, 15:51)  sergeeff, вопрос в другом - когда именно они подставляются? Или может я ошибаюсь и неправильно понимаю, как в простом си используется define? И что, если я определил хоть 10 тысяч дефайнов, в памяти, после линковки они занимать место не будут? _Pasha, а как объявить строку-чар константу? Что-то вы про какие-то странные вещи спрашиваете. define назначает некоторому символическому имени некое значение и все!!! Чего вы там уж собираетесь такое в define засунуть - это ваше личное дело. Это все манипуляции до компиляции, и тем более до линкера. Вы как-то повнятнее спросите, а лучше с примером.
|
|
|
|
|
Jan 29 2009, 15:59
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(YChebisheva @ Jan 29 2009, 13:57)  мне говорили, что без крайней необходимости не стоит писать в с++, лучше в с. Глупости. Если только это не связано с организационными моментами. Типа "в команде больше никто плюсов не знает". Цитата(YChebisheva @ Jan 29 2009, 13:57)  У меня есть хедер с кучей констант. Был написал как для с++ как Код const int CP_BUFSIZE = 4095; const char CP_CANCEL[] = "CANCEL"; Для си переписала так: Код static const char CP_BUFSIZE = 4095; static const char CP_CANCEL[] = "CANCEL"; Правильно ли это? Будет ли они занимать место? Нет. Будут. Надо так: Код <файл>.h: #define CP_BUFSIZE 4095 extern const char *CP_CANCEL;
<файл>.c: const char CP_CANCEL[] = "CANCEL"; Цитата(YChebisheva @ Jan 29 2009, 13:57)  Повлияет ли быстродействие, когда я для экономии, вместо массива int, объявлю массив unsigned short int? при условии, что реально я там буду юзать данные <= 65535. Вопрос сложный. Зависит от архитектуры и системы команд процессора. Быстродействие может упасть, а может остаться таким же. Цитата(YChebisheva @ Jan 29 2009, 13:57)  А так же повлияет ли на скорость работы, когда буду писать-читать данные или из статического массива или из куска данных, выделенных malloc? Опять же зависит от системы команд. Для AVR скорее всего будет медленнее, для PC - нет, для ARM - может оказаться и быстрее, зависит от компилятора.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 20 2009, 07:14
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
Цитата(YChebisheva @ Jan 29 2009, 14:57)  У меня есть хедер с кучей констант. Был написал как для с++ как надо не Код static const char CP_BUFSIZE = 4095; а Код static const int CP_BUFSIZE = 4095; Цитата(YChebisheva @ Jan 29 2009, 14:57)  Правильно ли это? Будет ли они занимать место? или подставляться просто значения как при define будут? смотрите http://electronix.ru/forum/index.php?s=&am...st&p=389309там dxp проводил наглядный эксперимент Модератор. Вместо цитирования столь объемного сообщения, можно нужно было дать ссылку не на ветку обсуждения, а на конкретное цитируемое сообщение пользователя.
Причина редактирования: Удалено бездумное цитирование.
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|