Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
DmitryM5
Love~
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 864
Записей в блоге: 1
#1

Размещение в памяти данных - C++

09.05.2016, 20:30. Просмотров 329. Ответов 14
Метки нет (Все метки)

Подскажите отличия,если я читаю данные(вещественные числа) с бинарного файла поэлементно и к примеру если я читаю те же самые данные из динамического массива.
Скорость из массива гораздо быстрее чем с файла.
В какой памяти что находится и как все происходит?

Добавлено через 6 часов 9 минут
up!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2016, 20:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Размещение в памяти данных (C++):

Размещение переменных в памяти - C++
пользуюсь Dev-C++, стало интересно, как компиляторы размещают даныые: последовательно, или как попало? предположим есть объявление int i;...

Размещение объекта в памяти - C++
Возможно ли размещение объекта в заранее выделенной памяти, например в массиве? Тоесть не просто скопировать, а так чтобы создание...

Размещение элементов в памяти - C++
Добрый день! Подскажите. может ли контейнер STL vector хранить значения типа char (wchar_t)? Если нет, то подскажите, как создать некую...

Размещение map'а в памяти - C++
Элементы вектора гарантировано размещаются в памяти рядом, в случае списка элементы лежат где попало, но для этого есть прямые и обратные...

Размещение функций в памяти - C++
Помогите бедному-зеленому кое-что устаканить в своей голове! Давно тревожит один вопрос: "как расположены функции в памяти?"....

размещение файлов в оперативной памяти - C++
Я бы хотел узнать, есть ли способ разместить в оперативной памяти какие нибудь файлы. Например текстовый и какой нибудь исполнительный exe...

14
nmcf
5544 / 4854 / 1647
Регистрация: 14.04.2014
Сообщений: 19,710
09.05.2016, 21:07 #2
Ну ясно, что из ОЗУ быстрее, только файл кэшируется, и как ты разницу увидел не понятно.
0
simoh
6 / 6 / 1
Регистрация: 10.05.2015
Сообщений: 52
Завершенные тесты: 5
09.05.2016, 21:08 #3
1. Бинарный файл находится на внешнем носителе. А динамический массив расположен в оперативной памяти. Доступ к оперативной памяти осуществляется быстрее, чем к внешнему устройству - будь то SSD или HDD.
2. Как всё происходит? в случае с HDD - считывающая головка устанавливается в нужное место пластины и считывает данные, при необходимости передвигаясь. А в случае с оперативной памятью - данные извлекаются из области памяти, адрес которой известен(указатель на массив).
2
DmitryM5
Love~
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 864
Записей в блоге: 1
09.05.2016, 21:14  [ТС] #4
Цитата Сообщение от nmcf Посмотреть сообщение
Ну ясно, что из ОЗУ быстрее, только файл кэшируется, и как ты разницу увидел не понятно.
Количество элементов 10^6,наверное поэтому и увидел разницу.
Цитата Сообщение от simoh Посмотреть сообщение
1. Бинарный файл находится на внешнем носителе. А динамический массив расположен в оперативной памяти. Доступ к оперативной памяти осуществляется быстрее, чем к внешнему устройству - будь то SSD или HDD.
2. Как всё происходит? в случае с HDD - считывающая головка устанавливается в нужное место пластины и считывает данные, при необходимости передвигаясь. А в случае с оперативной памятью - данные извлекаются из области памяти, адрес которой известен(указатель на массив).
А скорость обращения к данным статического и динамического массива одинаковая?
0
simoh
6 / 6 / 1
Регистрация: 10.05.2015
Сообщений: 52
Завершенные тесты: 5
09.05.2016, 21:29 #5
По идее скорость доступа к статическому массиву быстрее, так как элементы расположены по порядку(в стеке), в то время, как в динамическом массиве элементы могут быть разбросаны по памяти(в куче).
1
nmcf
5544 / 4854 / 1647
Регистрация: 14.04.2014
Сообщений: 19,710
09.05.2016, 22:11 #6
simoh, ну смотря как он организован. Одномерный массив нигде не разбросан.
0
simoh
6 / 6 / 1
Регистрация: 10.05.2015
Сообщений: 52
Завершенные тесты: 5
09.05.2016, 22:45 #7
Одномерный динамический массив нигде не разбросан?
0
nmcf
5544 / 4854 / 1647
Регистрация: 14.04.2014
Сообщений: 19,710
10.05.2016, 09:00 #8
Нет.
0
vxg
Модератор
3184 / 1987 / 227
Регистрация: 13.01.2012
Сообщений: 7,680
10.05.2016, 09:15 #9
DmitryM5, можно отобразить файл в память и работать с ним практически так же быстро как с объектами расположенными в этой памяти по праву рождения
1
DmitryM5
Love~
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 864
Записей в блоге: 1
10.05.2016, 16:13  [ТС] #10
а как это делается?
0
vxg
Модератор
3184 / 1987 / 227
Регистрация: 13.01.2012
Сообщений: 7,680
11.05.2016, 09:45 #11
Цитата Сообщение от DmitryM5 Посмотреть сообщение
а как это делается?
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
//---------------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
    const char *file_name = "D:\\temp\\test.txt"; //12345678901234567890
    int size = 20;
 
    HANDLE h_file = CreateFile(file_name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    if (h_file == INVALID_HANDLE_VALUE)
    {
        return -1;
    }
    HANDLE h_mem = CreateFileMapping(h_file, 0, PAGE_READONLY, 0, size, 0);
    if (!h_mem)
    {
        CloseHandle(h_file);
        return -1;
    }
    unsigned char *content = (char *)MapViewOfFile(h_mem, FILE_MAP_READ, 0, 0, size);
    if (!content)
    {
        CloseHandle(h_mem);
        CloseHandle(h_file);
        return -1;
    }
 
    printf("%c\n", *(content + 9)); //0
 
    UnmapViewOfFile(content);
    CloseHandle(h_mem);
    CloseHandle(h_file);
 
    system("pause");
 
    return 0;
}
//---------------------------------------------------------------------------
1
DmitryM5
Love~
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 864
Записей в блоге: 1
11.05.2016, 10:09  [ТС] #12
Спасибо!
Так все таки, если я создам массив из миллиона чисел, и хочу в цикле посчитать их сумму.
Быстрее будет со статическим массивом или с динамическим?
В плане теории где что хранится будет и разница.
0
nmcf
5544 / 4854 / 1647
Регистрация: 14.04.2014
Сообщений: 19,710
11.05.2016, 10:47 #13
Да одинаково будет. Тут один недавно выяснял быстрее ли malloc(), чем new. Это не ты был?
0
DmitryM5
Love~
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 864
Записей в блоге: 1
11.05.2016, 18:41  [ТС] #14
Цитата Сообщение от nmcf Посмотреть сообщение
Да одинаково будет. Тут один недавно выяснял быстрее ли malloc(), чем new. Это не ты был?
Нет

Добавлено через 7 часов 33 минуты
Цитата Сообщение от nmcf Посмотреть сообщение
Да одинаково будет. Тут один недавно выяснял быстрее ли malloc(), чем new. Это не ты был?
Просто где то читал, что статические и динамические массивы размещаются в разной памяти вроде как.
Вот и думаю что скорость обращения может быть разной..
0
nmcf
5544 / 4854 / 1647
Регистрация: 14.04.2014
Сообщений: 19,710
11.05.2016, 18:43 #15
Ну по статусу она, может, и разная. Только ОЗУ-то одно.
1
11.05.2016, 18:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2016, 18:43
Привет! Вот еще темы с ответами:

Размещение класса в динамической памяти - C++
Добрый день! Интересует такой вопрос, который я никак не пойму: Есть класс class Container, который создается в динамической памяти. c...

Размещение объектов в заданных блоках памяти - C++
Здорова! Есть от код: //razmewenie ob6ektov v zadanux blokax pam9ti #include &lt;iostream&gt; using std::cout; using std::endl; ...

Динамическое размещение объекта в определённом месте памяти с последующим её освобождением - C++
Доброго времени суток. В C++ имеется возможность размещать объект по чётко определённому, указанному разработчиком, адресу в памяти. В...

Написать программу обработки двумерных массивов, используя динамическое размещение данных - C++
Сформировать вектор из наименьших значений элементов столбцов и найти их среднее арифметическое помогите написать программу..


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru