Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.93/14: Рейтинг темы: голосов - 14, средняя оценка - 4.93
klynxe
11 / 11 / 4
Регистрация: 07.09.2012
Сообщений: 542
1

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

05.02.2014, 15:04. Просмотров 2743. Ответов 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
Ответы с готовыми решениями:

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

Выделение памяти, проверка на утечку памяти
Интересуют два вопроса: 1. Правильно ли устроен алгоритм выделения, удаление...

Выделение памяти(С = С++)
Привет. Нужна помощь, в выделении памяти. Есть код на С, нужно перевести его в...

Выделение памяти
Можно ли сделать так, чтобы в memory выделилась память для 5 int объектов, а...

Выделение памяти
Доброго времени суток. Чтобы выделить память под двумерный массив в такой...

20
programina
2052 / 607 / 41
Регистрация: 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
2052 / 607 / 41
Регистрация: 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
2436 / 2143 / 523
Регистрация: 25.03.2012
Сообщений: 7,720
Записей в блоге: 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 / 47
Регистрация: 29.03.2013
Сообщений: 237
05.02.2014, 15:34 8
klynxe, В вижуал студио 2012 проблем не возникает. Либо попробуйте память через маллок выделить, если что либо изменит это
0
programina
2052 / 607 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
05.02.2014, 15:37 9
если маллок, то нужно юзать сишное выделение памяти.
0
SatanaXIII
Почетный модератор
Эксперт С++
5773 / 2773 / 377
Регистрация: 01.11.2011
Сообщений: 6,743
Завершенные тесты: 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
2577 / 1756 / 289
Регистрация: 24.11.2012
Сообщений: 4,387
05.02.2014, 15:44 11
Что препятствует использованию контейнеров stl?
0
zelim
77 / 77 / 9
Регистрация: 26.12.2011
Сообщений: 217
05.02.2014, 15:45 12
Kuzia domovenok, это Си-шная функция, которая используется ТС-ом не по назначению.
klynxe, раз уж используете функции из Си, то и выделяйте память соответствующе и не лезьте к С++ операторам.
0
Kuzia domovenok
2436 / 2143 / 523
Регистрация: 25.03.2012
Сообщений: 7,720
Записей в блоге: 1
05.02.2014, 16:10 13
zelim, ты уверен, что это стандартная сишная функция, а не какое-либо расширение, зависящее от ОС или компилятора?
0
Croessmah
++Ͻ
14754 / 8432 / 1601
Регистрация: 27.09.2012
Сообщений: 20,731
Записей в блоге: 2
Завершенные тесты: 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
2436 / 2143 / 523
Регистрация: 25.03.2012
Сообщений: 7,720
Записей в блоге: 1
05.02.2014, 16:34 15
Croessmah, тогда malloc+placement new и можно использовать _msize!
0
0x10
2577 / 1756 / 289
Регистрация: 24.11.2012
Сообщений: 4,387
05.02.2014, 16:35 16
Цитата Сообщение от Croessmah Посмотреть сообщение
сохранить при выделении. В чем проблема то?
В том, что там вместо аккуратных структур написан вот этот ад: 5-ти мерный массив
0
Croessmah
05.02.2014, 16:37
  #17

Не по теме:

Цитата Сообщение от 0x10 Посмотреть сообщение
В том, что там вместо аккуратных стуктур написан вот этот ад
офигеть... =-O

0
klynxe
11 / 11 / 4
Регистрация: 07.09.2012
Сообщений: 542
05.02.2014, 17:14  [ТС] 18

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
Не по теме:
Сообщение от 0x10
В том, что там вместо аккуратных стуктур написан вот этот ад
офигеть...
Ладно, переделаю.....
А так вообще как нормально размер определить я так и не понял


_msize в нете почитаю, у нее проблемы, если использовать не int и еще пару типов
0
Croessmah
++Ͻ
14754 / 8432 / 1601
Регистрация: 27.09.2012
Сообщений: 20,731
Записей в блоге: 2
Завершенные тесты: 1
05.02.2014, 17:16 19
Цитата Сообщение от klynxe Посмотреть сообщение
А так вообще как нормально размер определить я так и не понял
стандартными путями никак
0
programina
2052 / 607 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
05.02.2014, 18:53 20
Цитата Сообщение от zelim Посмотреть сообщение
Kuzia domovenok, это Си-шная функция, которая используется ТС-ом не по назначению.
У меня нет такой функции.

Добавлено через 7 минут
А вообще, такое бывает, что нужно найти длину массива неизвестной изначально длины?
0
05.02.2014, 18:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2014, 18:53

До выделение памяти в С++
Всем приветик. Вообщем есть некоторые сложности с довыделение памяти... Что я...

Выделение памяти
MyClass&amp; DXI =* new MyClass(); Это корректный код для выделения памяти, чтобы...

Выделение памяти
Сразу кидаю код. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;memory&gt;...


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

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

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