почему мы используем sizeof с помощью malloc?[закрыто]

StackOverflow https://stackoverflow.com//questions/22077638

  •  23-12-2019
  •  | 
  •  

Вопрос

Какова цель использования sizeof с помощью malloc в C?Зачем это необходимо?

Я имею в виду, что мы можем использовать sizeof но мы уже знаем размер (=1000 байт) того, что мы выделяем в памяти?

Я новичок в C so.Это может быть очень очевидный вопрос.

Это было полезно?

Решение

Типы Данных и Память Имеют значение

Ответ кроется в типах данных.Пока ты знаешь сколько объектов для чего вы хотите выделить память, возможно, вам не захочется утруждать себя мысленным вычислением их размера.

Так же как и ремонтопригодность

Кроме того, что, если состав этих изменений изменится позже?Тогда вы облажались, и вам придется все редактировать.

Так что в вашем примере это не имеет значения без контекста.Но в случае, когда вы хотите выделить память для более сложных вещей (скажем, для структуры с несколькими полями), это становится довольно важным и полезным.

Пример 1 (здесь это не так важно):

char *s = malloc(100 * sizeof(char));

Но, эй, это просто charс, все в порядке, ты мог бы это сделать:

char *s = malloc(100);

В целом работает.Но выстрелить себе в ногу, как вы увидите ниже.

Пример 2 (уже немного имеет значение):

int *i = malloc(100 * sizeof(int));

Конечно, вы могли бы написать это:

int *i = malloc(100 * 4);

То есть, предполагая, что вы разрабатываете только для одной архитектуры, которую вы довольно хорошо знаете.

Пример 3 (начинает иметь немаловажное значение!):

typedef struct s_listelement{
    int                  dataitem;
    struct s_listelement *link;
}              t_listelement;

t_listement *le = malloc(sizeof(t_listelement));

Теперь представьте, что структура элемента связанного списка содержит множество других полей...

Хотели бы вы доверять sizeof(), или пойти повеселиться и посчитать самому?

Другие советы

Предположим, вы хотите выделить память для хранения ints.Ваше первоначальное предположение будет таким: "Хорошо, мне нужно иметь n целые числа, и каждое целое число требует x байты.Таким образом, пространство будет n*x байты.

Но на самом деле это x зависит от архитектуры.Это может быть 16-битный, 32-битный и т.д.Поэтому, чтобы ваш код мог работать в различных средах, рекомендуется использовать n*sizeof(int) вместо n*x.

Например, если вам нужно выделить место для 10 целых чисел:

int *p=malloc(sizeof(int)*10);

Что произойдет, если вы измените размер mallocated?

Вам нужно будет 1) снова вычислить новый размер (оставляя в стороне проблемы с несколькими целевыми архитектурами, когда вам придется вычислять новый размер в каждой цели), 2) выполнить поиск по всем malloc(1000), убедитесь , что это относится к mallocated (что может быть неочевидно) и замените на новый размер.

У вас нет ни одной из этих 2-х проблем при использовании sizeof.Таким образом, используя sizeof приводит к созданию более удобного в обслуживании и читаемого кода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top