Всем привет!
Как функция _msize() узнаёт объём памяти, выделенный под динамический массив, откуда берётся эта информация?
https://pastebin.com/wVCEW1p8
Спасибо за ответы!
Другие языки программирования и технологии
C++ _msize() как узнаёт длину массива?
Размер массива тоже хранится в памяти. Если для простоты примера взять подход к выделению памяти, предложенный Д. Кнутом, то слева от участка, на который указывает указатель, хранится так называемый граничный маркер - размер выделенного блока и флаг "занят/свободен". Этот самый размер система и возвращает. Такой же маркер хранится после выделенного блока.
Если даже взять какой-нибудь более сложный аллокатор, например, SLAB, то по самому указателю можно вычислить адрес slab'a и вернуть размер блока.
Если даже взять какой-нибудь более сложный аллокатор, например, SLAB, то по самому указателю можно вычислить адрес slab'a и вернуть размер блока.
Азамат Бекмагамбетов
Какой аллокатор используется?
ЫЫЫЫ, указатели, экономия памяти, ЫЫЫ! Это же железо сгорит, если создать двумерный массив!
Через попу создали язык... Создали какие-то массивы, которые никто не юзает, ибо настолько сильно жадничать памятью - дебилизм. Не люблю я синтаксис этот, не люблю... Все языки - как языки, а этот - чучело лохматое. Да, есть и в других языках минусы, но... Но хорошо, что не Паскаль.
Как говорится: <<У С++ есть лишь 2 плюса>>
Через попу создали язык... Создали какие-то массивы, которые никто не юзает, ибо настолько сильно жадничать памятью - дебилизм. Не люблю я синтаксис этот, не люблю... Все языки - как языки, а этот - чучело лохматое. Да, есть и в других языках минусы, но... Но хорошо, что не Паскаль.
Как говорится: <<У С++ есть лишь 2 плюса>>
Андрей Барахтин
Массив - это одна из базовых структур данных в программировании. В большинстве языков программирования есть массивы.
> Все языки - как языки
Какие языки ты знаешь?
> Все языки - как языки
Какие языки ты знаешь?
Используйте std::vector или таскайте в отдельной переменной размер массива.
Азамат Бекмагамбетов
Я всегда и везде использую vector < T >, а спрашиваю из интереса. Очень интересно откуда информация берётся, где это лежит?
#include
#include
#include
#include
using namespace std;
void Gen(int *);
void Show(int *);
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
srand(time(NULL));
system("color 0A");
cout << "Введите длину массива ";
unsigned n;
cin >> n;
auto arr = new int[n];
Gen(arr);
Show(arr);
system("pause");
return 0;
}
void Gen(int *arr)
{
auto len = _msize(arr) / sizeof(arr[0]);
generate(arr, arr + len, []() { return rand() % 49 + 1; });
}
void Show(int *arr)
{
auto len = _msize(arr) / sizeof(arr[0]);
cout << "Длина массива замерена и равна "
<< len << endl;
for (auto t = 0u; t < len; ++t)
{
cout << arr[t] << " ";
}
cout << endl;
}
#include
#include
#include
using namespace std;
void Gen(int *);
void Show(int *);
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
srand(time(NULL));
system("color 0A");
cout << "Введите длину массива ";
unsigned n;
cin >> n;
auto arr = new int[n];
Gen(arr);
Show(arr);
system("pause");
return 0;
}
void Gen(int *arr)
{
auto len = _msize(arr) / sizeof(arr[0]);
generate(arr, arr + len, []() { return rand() % 49 + 1; });
}
void Show(int *arr)
{
auto len = _msize(arr) / sizeof(arr[0]);
cout << "Длина массива замерена и равна "
<< len << endl;
for (auto t = 0u; t < len; ++t)
{
cout << arr[t] << " ";
}
cout << endl;
}
интересный вопрос
оставлю коммент чтобы посмотреть ответы
оставлю коммент чтобы посмотреть ответы
Похожие вопросы
- Задача - описать класс "Массив" с параметрами: длина массива, указатель на первый элемент массива
- Microsoft Visual C++ 6.0 В одномерном массиве, состоящем из n вещественных элементов, вычислить...
- помогите!!! вопрос по C++ нужно написать программку "заполните массив так, чтобы все его элементы были различны.
- пожалуйста, напишите мне программу этого вопроса в C ++.пожалуйста помогите. Создать динамический массив из N чисел.
- многомерные массивы (c++) Как нужно объявить четырехмерный массив с помощью указателей?
- C++: И снова передача двумерных массив в функцию.. . каким макаром это сделать?
- c++ задачка про одномерный статический массив
- C++ Нужно вычислить сумму элементов массива, расположенных между первым и последним отрицательными элементами.
- С клавиатуры вводится n – длина ступенчатого массива.
- C++ Двухмерный массив с случайными не повторяющимися числами.