Несмотря на принятый ответ (которому я верю, чтобы быть корректным), кажется, существуют беспорядки о том, сколько байтов выделяется из-за выравнивания. Таким образом, вот немного теста на моем 32-разрядном Linux с gcc-4.3:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* p1 = calloc(6, 4);
char* p2 = calloc(4, 6);
char* p3 = calloc(1,1);
printf("%p, %p, %p\n", p1, p2, p3);
return 0;
}
результат:
0x826b008, 0x826b028, 0x826b048
то, которое показывает, что и calloc(6,4)
и calloc(4,6)
выделяют тот же объем памяти, который является , округлилось к 32 байтам в моей системе. Изменение чисел к calloc(3,4)
и calloc(4,3)
даст следующий результат:
0x95d2008, 0x95d2018, 0x95d2028
, который показывает, что 16 байтов резервируются, когда 12 требуются и выделяются программе. В любом случае, и calloc(a,b)
и calloc(b,a)
вызовы имеют тот же эффект на использование памяти.
Добавленный Jonathan Leffler, потому что 300 символов никогда не будут достаточно.
Рассматривают эту программу, которая пропускает память как истинное решето, но демонстрирует точку:
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i, j, k;
for (i = 1; i < 17; i++)
for (j = 1; j < 9; j++)
for (k = 0; k < 4; k++)
printf("(%2d,%d)%d: %p\n", i, j, k, calloc(i, j));
return(0);
}
В Windows, под Cygwin, это запускается путем выделения блоков, которые на расстоянии в 16 байтов (на самом деле, второй блок составляет 24 байта после первого, но после этого, они на расстоянии в 16 байтов). При выделении (2,7), адреса блока начинают увеличивать на 24 байта; аналогично, (3,4) выделяет блоки на расстоянии в 16 байтов, но (3,5) выделяет блоки на расстоянии в 24 байта. И, для записи оба (4,6) и (6,4) указатели возврата на расстоянии в 32 байта.
Это просто демонстрирует, что существуют немного служебные связаны с вызовом выделения. Если Вы смотрите на типичную реализацию malloc () и др. в K& R, Вы будете видеть, что размер блока хранится перед памятью, которую Вы наделены правом использовать. Различные реализации делают эти вещи по-другому; взволнованные по поводу растаптывающей памяти постараются не хранить управляющую информацию рядом, где пользователь может нанести ущерб.
, Когда Вы calloc (4,6), у Вас только есть надежный доступ к 24 байтам данных. Даже если Ваша реализация дает Вам возвращаемые значения, которые на расстоянии в 32 байта, Вы не можете безопасно больше использовать, чем 24 байта, которые Вы запросили. И отладочные версии malloc () будут наблюдать, пишете ли Вы из границ, Вы запросили.
Можно установить стандартную версию Amazon Linux AMI. Для разработки и низкого трафика микроэкземпляр является отличным / недорогим.
Если вы хотите получить готовую установку, ознакомьтесь с No.de - зарегистрируйтесь и создайте купон. Также пока бесплатно.
Вы можете использовать бесплатные изображения, созданные и поддерживаемые StrongLoop. Есть изображения для стабильных версий узла, для каждого региона. Вы можете искать "StrongLoop" под изображениями. Последняя версия узла на этих изображениях - 0.10.26.
USWest Oregon - ami-14d5bf24,
USEast - ami-6541590c,
USWest N California - ami-5a3e061f,
Ireland - ami-f154ae86,
AP Singapore - ami-5a7f2c08,
AP Tokyo - ami-3d2a513c,
AP Sidney - ami-b5178f8f,
AP Sao Paulo - ami-1919bb04,
Наряду с узлом эти образы также имеют инструменты StrongLoop cli, которые можно использовать для упрощения развертывания приложений узла в AWS EC2.