С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813

Чтение участка памяти

03.05.2013, 21:12. Показов 2738. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ищу, но не могу найти... Дело в том, что мне нужно в массиве выделять блоки по 4 элемента. Все было бы хорошо, если бы массив был бы у меня кратного 4м размера. Вот я и собираюсь, когда подойду к краю массива все равно прочитать 4 элемента, а затем затереть то, что прочитал лишнего(Саму помять за массивом я понятное дело трогать не буду). Так вот, возможно ли такое, что я не смогу прочитать элементы за пределом массива и выскочит что-нибудь типа "Memory is not readable"?
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.05.2013, 21:12
Ответы с готовыми решениями:

tbb parallel_for чтение одного участка памяти разными потоками
Добрый день. Предположим, нужно распараллелить свертку одного и того же изображения разными фильтрами (использую tbb:: parallel_for)- в...

Освобождение участка памяти
Добрый вечер. Подскажите, пожалуйста, где здесь ошибка. В разделе "После освобождения памяти" программа ничего не выдает. ...

Двойное освобождение одного и того же участка памяти
Всем привет! Помогите разобраться. Я написала в своем коде такую штуку: digits = X.digits; Получалось, что у меня два...

9
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
03.05.2013, 21:42
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Так вот, возможно ли такое, что я не смогу прочитать элементы за пределом массива и выскочит что-нибудь типа "Memory is not readable"?
Очень может быть. Что мешает выделить-таки массив с числом элементов, кратным четырём? Так ли много займут максимум три лишних элемента?
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,855
03.05.2013, 21:51
nonedark2008,
это делается примерно так
посмотри исходники memcpy пример из Вики
http://ru.wikipedia.org/wiki/Memcpy
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int i, m;
unsigned long  *wdst = dst;  // текущая позиция в буфере назначения
unsigned long  *wsrc = src;  // текущая позиция в источнике
unsigned char  *cdst, *csrc;
 
for(i = 0, m = n / sizeof(long); i < m; i++)  // копируем основную часть блоками по 4 или 8 байт
   *(wdst++) = *(wsrc++);                     // (в зависимости от платформы)
 
cdst = (unsigned char*)wdst;
csrc = (unsigned char*)wsrc;
 
for(i = 0, m = n % sizeof(long); i < m; i++)             // остаток копируем побайтно
   *(cdst++) = *(csrc++);
 
return dst;
т.е сначала копируем блоками по 4 байта а остатки побайтно и скорость и за пределы не выйдешь
а если кратно 4(8) то вторая часть вообще не будет исполнятся
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
03.05.2013, 21:55  [ТС]
NoMasters, мешает то, что у меня куча других алгоритмов основано на том, что память у меня именно такой длинны, какая есть. Поэтому случится коллапс...

Добавлено через 2 минуты
ValeryS, все было бы хорошо, но я могу либо читать именно по 4 элемента, либо читать все по одному элементу. Но тогда мое решение разобъется на две части, которые будут повторяться. Первая работает с группами по 4, а вторая - по одному элементу. Хотя функционал у них будет один и тотже.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,855
03.05.2013, 22:02
Цитата Сообщение от nonedark2008 Посмотреть сообщение
ValeryS, все было бы хорошо, но я могу либо читать именно по 4 элемента, либо читать все по одному элементу.
элемент это байт???
да и если нет что мешает привести типы?
сформулируй задачу конкретней?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
03.05.2013, 22:39  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
элемент это байт???
Нет, элемент - это 32 битное число.
Типы привести не получится.
Мне именно нужно было знать, может ли возникнуть ошибка, если я прочитаю память, которая находится за пределами массива. Оказывается - может.
Все дело в том, что мне нужно было прочитать 128бит данных в регистр из массива, но вот на границе массива возникает такая трабла.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,855
03.05.2013, 23:01
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Нет, элемент - это 32 битное число.
т.е unsigned int ( я про 32 битные системы)

а прочитать нужно 4 инта
правильно?

ну примерно так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
struct MyStruct
{
 int a1;
 int a2;
 int ar3;
 int a4;
}
 
MyStruct MyRead(MyStruct*bloc,size_t sizeBloc,int offset)
 {
   MyStruct ms;
   int * intBloc=(int*)bloc;
      int * MSBloc=(int*)ms;
   if( (sizeBloc%sizeof(MyStruct))==0 &&(offset%sizeof(int))==0 )
      // если размер кратен  MyStruct и смещение лежит на границе int
     // то используем какую то быструю функцию    
   
   else// иначе копируем поэлементно 
    {
     ms.a1=ms.a2=ms.a3=ms.a4=0;
      for(int i=offset;i<sizeBloc;i++)
      *MSBloc++=intBloc++;
     }
  return  ms;
}
это только идея
я например не проверял если размер блока 8 а смещение 6

а как ты пытаешься быстро скопировать 128 бит ?
в ассемблере все равно будет работа с указателями на 32битные числа

может посему не заморачиватся а работать с указателями?
1
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
04.05.2013, 01:28  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
а как ты пытаешься быстро скопировать 128 бит ?
Я загружаю 128 бит в регистр xmm при помощи команды movdqa.
Кстати, есть у меня еще одна проблема. В ассемблерной вставке.
У меня есть такая строка:
Assembler
1
pinsrd xmm0, dword ptr [eax + ebx * 4], edx;
И вот компилятор ругается на edx, пишет "Improper operand type". По документации сказано, что он должен быть типа imm8. Если просто написать 0 либо 1, то все компилирует. Что делать - вообще не понимаю T_T

Не по теме:


В разделе по асме я уже спросил, но может и тут найдутся знающие люди?

0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,855
04.05.2013, 09:51
не могу ничего подсказать в современном Асме не силен
но по своему опыту могу сказать что встроенный ассемблер обычно обрезанный
по сему лучше писать на нормальном а объектный файл уже прилинковать к программе
или создать библиотеку
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
04.05.2013, 11:33  [ТС]
ValeryS, спасибо. Но я тоже в нем не силен. Пишу от силы второй день.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.05.2013, 11:33
Помогаю со студенческими работами здесь

Чтение памяти
Не могу понять почему не читается память по адрессу, уже 3 дня гуглю. #include&lt;windows.h&gt; #include&lt;tlhelp32.h&gt; ...

Чтение из памяти
добрый день, нужна помощь у же не знаю что я не так делаю , вернее как мне нужно сделать void foo(char * inputfile, char * outputfile,...

чтение из памяти
господа допустим есть - int a=5; мне нужно получить адрес переменной &quot;а&quot; и из адреса получить значение т.е. - 5 . Как возможно это...

Чтение строки из памяти
Пытаюсь обратиться к оперативной памяти и прочитать оттуда строку char fullChar = &quot;&quot;; char tempChar...

Чтение ячейки памяти
Сказали считать ячейку памяти, в которой лежит целое число, а так же посчитать кол-во 0 и 1. До сих пор не пойму, что от меня требуют и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru