реклама на сайте
подробности

 
 
> Уровень оптимизации компилятора и глобальные переменные
_Mikhail_
сообщение Aug 21 2013, 09:15
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 19-04-11
Пользователь №: 64 477



Добрый день!
Среда разработки Keil 4.72, мк LPC2478.

typedef unsigned int * pInt32U;

#define Adr 0xE0084000

pInt32U a = (pInt32U)Adr ;
pInt32U b = (pInt32U)Adr +1;
pInt32U c = (pInt32U)Adr +2;
pInt32U d = (pInt32U)Adr +3;

В результате:
a = 0xE0084000,
b = 0xE0084004,
c = 0xE0084008,
d = ЛЕВЫЙ АДРЕС!!!!

Если отключить оптимизацию компилятора (Level 0 -O0), то результат становится ожидаемым:
a = 0xE0084000,
b = 0xE0084004,
c = 0xE0084008,
d = 0xE008400C

Указатели в модуле объявляются глобально.
В "чистом" проекте данный код работает нормально.

В чем может быть проблема?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
Сергей Борщ
сообщение Aug 21 2013, 10:04
Сообщение #2


Гуру
******

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



QUOTE (_Mikhail_ @ Aug 21 2013, 11:15) *
В чем может быть проблема?
Например в том, что компилятор перенес в другое (более позднее) место ее инициализацию.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_Mikhail_
сообщение Aug 21 2013, 10:44
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 19-04-11
Пользователь №: 64 477



Цитата(Сергей Борщ @ Aug 21 2013, 14:04) *
Например в том, что компилятор перенес в другое (более позднее) место ее инициализацию.


Точно! Семен Семеныч! )))
Этот указатель я еще не успел использовать в программе. И при включенной оптимизации компилятор его вообще инициализировать не стал.

Сергей, спасибо!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 19:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.0135 секунд с 7
ELECTRONIX ©2004-2016