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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
klynxe
11 / 11 / 4
Регистрация: 07.09.2012
Сообщений: 542
#1

выделение памяти new и ее подсчет _msize - C++

05.02.2014, 15:04. Просмотров 2174. Ответов 20
Метки нет (Все метки)

C++
1
2
3
void* a;
        a=new char[1];
        int size=_msize(a);
почему размер 12?
для
C++
1
2
3
void* a;
        a=new char[13];
        int size=_msize(a);
размер 20
для
C++
1
2
3
void* a;
        a=new char[100];
        int size=_msize(a);
размер 104
для
C++
1
2
3
void* a;
        a=new char[200];
        int size=_msize(a);
размер 204
а как 12 насчитывается? Для int, double, short тоже 12 почему?

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

Выделение памяти, проверка на утечку памяти - C++
Интересуют два вопроса: 1. Правильно ли устроен алгоритм выделения, удаление и запись ячейки памяти? Может быть, есть более простые...

Распределение памяти. Динамическое выделение памяти - C++
an-1 an-2 ... a2

До выделение памяти в С++ - C++
Всем приветик. Вообщем есть некоторые сложности с довыделение памяти... Что я хочу сделать: есть 2-х мерный массив (он ещё и квадратный)....

Выделение памяти - C++
Всем доброго времени суток! Пытаюсь сделать связанный список на 100кк элементов, но не выделив памяти и под половину, программа жрёт 4...

Выделение памяти - C++
Платформа и компилятор x64. Установлено 64Gb ОЗУ, 60Gb из них откусил SQL Server. Пытаюсь сделать следующее: struct Dictionary { ...

Выделение памяти - C++
Доброго всем вечера. В книжке нашел задание: определить класс, представляющий стек. Сделал так, что при заполнении всего стека,...

20
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
05.02.2014, 15:08 #2
C++
_msize(a);
откуда такая функция? Почему не sizeof()?

Добавлено через 3 минуты
Цитата Сообщение от klynxe Посмотреть сообщение
Задача вообще говоря определить число элементов в массиве
Его не нужно определять, так как вы сами его задаете в квадратных скобках.
0
klynxe
11 / 11 / 4
Регистрация: 07.09.2012
Сообщений: 542
05.02.2014, 15:22  [ТС] #3
Цитата Сообщение от programina Посмотреть сообщение
Почему не sizeof()
возвращает размер указателя а не размер массива
Цитата Сообщение от programina Посмотреть сообщение
Его не нужно определять, так как вы сами его задаете в квадратных скобках.
У меня 5-ти первый массив разной длинны внутри и с разными типами данных, мне тогда нужен еще 4-ех мерный массив для хранения длинны каждого массива
0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
05.02.2014, 15:26 #4
klynxe, а почему не хотите писать char вместо void?

Добавлено через 1 минуту
и все таки что за _msize?
0
klynxe
11 / 11 / 4
Регистрация: 07.09.2012
Сообщений: 542
05.02.2014, 15:28  [ТС] #5
Цитата Сообщение от programina Посмотреть сообщение
klynxe, а почему не хотите писать char вместо void?
Потому что у меня 5-ти мерный массив в котором разные типы

Добавлено через 1 минуту
Цитата Сообщение от programina Посмотреть сообщение
msize
Функция должна возвращать размер выделенной памяти...
из #include <malloc.h>
0
Kuzia domovenok
1948 / 1801 / 137
Регистрация: 25.03.2012
Сообщений: 6,238
Записей в блоге: 1
05.02.2014, 15:29 #6
Впервые сталкиваюсь с msize! это из нового стандарта? Или это какой-то макрос, специфичный для некоего компилятора?
0
klynxe
11 / 11 / 4
Регистрация: 07.09.2012
Сообщений: 542
05.02.2014, 15:30  [ТС] #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
msize
Наберите в гугле, знаю что подключается из <malloc.h> у меня билдер 6
0
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
05.02.2014, 15:34 #8
klynxe, В вижуал студио 2012 проблем не возникает. Либо попробуйте память через маллок выделить, если что либо изменит это
0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
05.02.2014, 15:37 #9
если маллок, то нужно юзать сишное выделение памяти.
0
SatanaXIII
Супер-модератор
Эксперт С++
5618 / 2653 / 246
Регистрация: 01.11.2011
Сообщений: 6,549
Завершенные тесты: 1
05.02.2014, 15:39 #10
Да, действительно. Билдер знает об этой функции:
Описание
Header File
malloc.h

Category
Memory Routines

Prototype
size_t _msize(void *block);

Description
Returns the size of a heap block.

_msize returns the size of the allocated heap block whose address is block. The block must have been allocated with malloc, calloc, or realloc. The returned size can be larger than the number of bytes originally requested when the block was allocated.

Return Value
_msize returns the size of the block in bytes.

Пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <malloc.h>        /* malloc() _msize() */
#include <stdio.h>            /* printf() */
 
int main( )
{
  int size;
  int *buffer;
 
  buffer = malloc(100 * sizeof(int));
  size = _msize(buffer);
  printf("Allocated %d bytes for 100 integers\n", size);
 
  return(0);
}
0
0x10
2478 / 1651 / 247
Регистрация: 24.11.2012
Сообщений: 4,087
05.02.2014, 15:44 #11
Что препятствует использованию контейнеров stl?
0
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
05.02.2014, 15:45 #12
Kuzia domovenok, это Си-шная функция, которая используется ТС-ом не по назначению.
klynxe, раз уж используете функции из Си, то и выделяйте память соответствующе и не лезьте к С++ операторам.
0
Kuzia domovenok
1948 / 1801 / 137
Регистрация: 25.03.2012
Сообщений: 6,238
Записей в блоге: 1
05.02.2014, 16:10 #13
zelim, ты уверен, что это стандартная сишная функция, а не какое-либо расширение, зависящее от ОС или компилятора?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
05.02.2014, 16:28 #14
http://docwiki.embarcadero.com/RADStudio/XE3/en/Msize
Returns the size of a heap block.

_msize returns the size of the allocated heap block whose address is block. The block must have been allocated with malloc, calloc, or realloc.The returned size can be larger than the number of bytes originally requested when the block was allocated.
Добавлено через 6 минут
Цитата Сообщение от klynxe Посмотреть сообщение
Задача вообще говоря определить число элементов в массиве
сохранить при выделении. В чем проблема то?
1
Kuzia domovenok
1948 / 1801 / 137
Регистрация: 25.03.2012
Сообщений: 6,238
Записей в блоге: 1
05.02.2014, 16:34 #15
Croessmah, тогда malloc+placement new и можно использовать _msize!
0
05.02.2014, 16:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2014, 16:34
Привет! Вот еще темы с ответами:

Не выделение памяти - C++
По какой причине не работает это программа ? #include&lt;iostream&gt; #include &lt;string&gt; using namespace std; int main () ...

выделение памяти - C++
#include &lt;iostream&gt; using namespace std; class Matrix { int m, n; public: float **M; Matrix(int a, int b); void...

Выделение памяти - C++
Здравствуйте! #include&lt;iostream&gt; int main() { int *mass = new int ; int *mass2 = new int ; std::cout &lt;&lt; (unsigned int)mass &lt;&lt;...

Выделение памяти - C++
Часто возникает такая проблема, когда конфигурирую проект как Release происходит ошибка выделения памяти (при вызывании new), например...


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

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

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