Фрагментация памяти в C ++ - PullRequest
0 голосов
/ 02 марта 2012

Я хочу использовать malloc () / new для выделения 256 КБ памяти переменной m. Затем используйте m для хранения данных, таких как строки и числа. Моя проблема в том, как сохранить данные в m и извлечь их.

Например, как сохранить int 123456 со смещением от 0 до 3 и прочитать его в переменную x? Или сохранить строку "David" со смещением 4 до 8 (или 9 с \ 0), а затем снова извлечь ее в переменную s?

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Вы можете хранить целое число, используя указатели.

unsigned char *p = new unsigned char[256 * 1000];
*(int *) p = 123456;
int x = *(int *) p;

Это ужасная идея. Не работайте с нетипизированной памятью и не пытайтесь играть быстро и свободно, как в PHP, потому что C ++ менее терпим к небрежному программированию.

Я предлагаю прочитать вводный учебник по С ++, в котором будут объяснены такие вещи, как типы и классы, которые вы можете использовать, чтобы избежать работы с нетипизированной памятью.

Редактировать: Из комментариев выше, похоже, что вы хотите узнать об арифметике указателей.

Не использовать арифметику с указателями *.

*, если вы не пообещаете, что знаете, что делаете.

0 голосов
/ 02 марта 2012

Пожалуйста, прочитайте мой комментарий, я думаю, вам нужно больше узнать о C и нативном программировании на низком уровне.

Есть ли конкретное приложение для этого формата?

чтобы назначить структуру памяти, вы можете сделать что-то вроде

struct my_format{
    int first;
    char second[5];
};

int main()
{
     struct my_format *mfp=
          malloc(sizeof(struct my_format));
     mfp->first=123456;
     free(mfp);
}

или что-то в этом роде не связано со спецификой памяти (т.е. точными позициями в IE), но делать это просто плохо почти во всех отношениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...