Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
05.02.2014, 15:04     выделение памяти new и ее подсчет _msize #1
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 минут
Задача вообще говоря определить число элементов в массиве
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2014, 15:04     выделение памяти new и ее подсчет _msize
Посмотрите здесь:

Выделение памяти C++
Выделение памяти. C++
C++ Распределение памяти. Динамическое выделение памяти
До выделение памяти в С++ C++
Выделение памяти C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
05.02.2014, 15:08     выделение памяти new и ее подсчет _msize #2
C++
_msize(a);
откуда такая функция? Почему не sizeof()?

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

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

Добавлено через 1 минуту
Цитата Сообщение от programina Посмотреть сообщение
msize
Функция должна возвращать размер выделенной памяти...
из #include <malloc.h>
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
05.02.2014, 15:29     выделение памяти new и ее подсчет _msize #6
Впервые сталкиваюсь с msize! это из нового стандарта? Или это какой-то макрос, специфичный для некоего компилятора?
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
05.02.2014, 15:30  [ТС]     выделение памяти new и ее подсчет _msize #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
msize
Наберите в гугле, знаю что подключается из <malloc.h> у меня билдер 6
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
05.02.2014, 15:34     выделение памяти new и ее подсчет _msize #8
klynxe, В вижуал студио 2012 проблем не возникает. Либо попробуйте память через маллок выделить, если что либо изменит это
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
05.02.2014, 15:37     выделение памяти new и ее подсчет _msize #9
если маллок, то нужно юзать сишное выделение памяти.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,331
Завершенные тесты: 1
05.02.2014, 15:39     выделение памяти new и ее подсчет _msize #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);
}
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
05.02.2014, 15:44     выделение памяти new и ее подсчет _msize #11
Что препятствует использованию контейнеров stl?
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
05.02.2014, 15:45     выделение памяти new и ее подсчет _msize #12
Kuzia domovenok, это Си-шная функция, которая используется ТС-ом не по назначению.
klynxe, раз уж используете функции из Си, то и выделяйте память соответствующе и не лезьте к С++ операторам.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
05.02.2014, 16:10     выделение памяти new и ее подсчет _msize #13
zelim, ты уверен, что это стандартная сишная функция, а не какое-либо расширение, зависящее от ОС или компилятора?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11820 / 6799 / 769
Регистрация: 27.09.2012
Сообщений: 16,877
Записей в блоге: 2
Завершенные тесты: 1
05.02.2014, 16:28     выделение памяти new и ее подсчет _msize #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 Посмотреть сообщение
Задача вообще говоря определить число элементов в массиве
сохранить при выделении. В чем проблема то?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
05.02.2014, 16:34     выделение памяти new и ее подсчет _msize #15
Croessmah, тогда malloc+placement new и можно использовать _msize!
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
05.02.2014, 16:35     выделение памяти new и ее подсчет _msize #16
Цитата Сообщение от Croessmah Посмотреть сообщение
сохранить при выделении. В чем проблема то?
В том, что там вместо аккуратных структур написан вот этот ад: 5-ти мерный массив
Croessmah
05.02.2014, 16:37
  #17

Не по теме:

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

klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
05.02.2014, 17:14  [ТС]     выделение памяти new и ее подсчет _msize #18

Не по теме:

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


_msize в нете почитаю, у нее проблемы, если использовать не int и еще пару типов
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11820 / 6799 / 769
Регистрация: 27.09.2012
Сообщений: 16,877
Записей в блоге: 2
Завершенные тесты: 1
05.02.2014, 17:16     выделение памяти new и ее подсчет _msize #19
Цитата Сообщение от klynxe Посмотреть сообщение
А так вообще как нормально размер определить я так и не понял
стандартными путями никак
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2014, 18:53     выделение памяти new и ее подсчет _msize
Еще ссылки по теме:

Выделение памяти C++
_msize возвращает максимально представимое значение C++
Откуда берет значения функция _msize? C++

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

Или воспользуйтесь поиском по форуму:
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
05.02.2014, 18:53     выделение памяти new и ее подсчет _msize #20
Цитата Сообщение от zelim Посмотреть сообщение
Kuzia domovenok, это Си-шная функция, которая используется ТС-ом не по назначению.
У меня нет такой функции.

Добавлено через 7 минут
А вообще, такое бывает, что нужно найти длину массива неизвестной изначально длины?
Yandex
Объявления
05.02.2014, 18:53     выделение памяти new и ее подсчет _msize
Ответ Создать тему
Опции темы

Текущее время: 15:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru