Если вы являетесь пользователем ubuntu, после установки apache необходимо запустить следующую команду в новой установке
sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt
В моем случае это нормально.
Это на самом деле неопределено, согласно стандарту. Указатель арифметики не гарантируется работать, если указатели не указывают на элемент, либо только за пределы того же массива.
Соответствующий раздел стандарта составляет 6,5,6: 9 (тяга N1362 C1x, но это не изменилось, поскольку C99), которые состояния:
, когда два указателя вычтены, оба должны указывать на элементы одного и того же массива объект, или один мимо последнего элемента объекта массива; Результатом разница Подписки двух элементов массива.
Вы, скорее всего, получите 250, если ваш int
DataType - 4 байта, но нет никакой гарантии. Неопределенное поведение (в отличие от поведения, определяемое внедрением), означает просто то, что не определено. Что-нибудь может произойти, вплоть до общего разрушения большой доли пространства-времени.
Курс повышения квалификации:
Q-P
Предполагается, сколько шагов с увеличением вы должны сделать, чтобы перейти из P
- Q
. Который является 1000 / SIZEOF (INT)
и равен 250. Помните Q ++
, фактически перейдем к следующему элементу типа int, не в середине этого, поэтому он должен добавить 4 фактическое значение указателя. Следовательно, результат.
В Linux процент использования памяти разделен на следующие уровни.
0 - 30% - без обмена 30 - 60% - коммутация грязных страниц 60 - 90% - Обмен чистыми страницами также на основе политики LRU.
90% - ссылаться на убийцу OOM (вне памяти) и убить процесс, потребляющий максимальную память.
Проверьте это - http://linux-mm.org/om_killer
В Think Windows может иметь аналогичную политику, поэтому вы можете проверить статистику памяти и убедиться, что вы никогда не попадаете на максимальный порог.
Один из способов прекратить потребление большего количества памяти - пойти спать и дать больше времени для запуска потоков очистки памяти.
-121--3024741-Q - P составляет 250.
2000 - 1000 = 1000
1000 / sizeof(int) = 250
Указатель арифметики, предполагая, что размер (INT) составляет 4.
struct foo { int ar[1000]; } big[10];
char small[10];
struct foo *fs, *fe;
char *ss, *se;
fs = &big[0]; fe = &big[9];
ss = &small[0]; se = &small[9];
fe - fs == se - ss;
То есть разница между двумя указателями в этом случае является количество элементов массива между ними. В этом случае это 0, 1, ... 8 или 9 элементов.
Ответ :
Q-P будет 250, предполагая, что вы на машине, где INT INT
составляет 4 байта.
Расчет:
Q - P = 1000 1000/4 (размер INT) = 250
Идея позади этого :
Идея арифметики указателя в том, что если у вас есть INT
на 1000 и INT
Указатель на 2000 год и спросить разницу, вы не , спрашивая, что 2000-1000. То, что вы спрашиваете, это, Сколько INT
Могу ли я поделиться между двумя.
Это очень удобно для всех видов операций, например:
int *i = 100;
i++; // This is **not** 101, it is 104, cause you actually want the next place an int could fit in memory.
Это особенно пригодится при работе с массивами. Массив INT (определен INT ARR [10]
) в основном рассматривается как указатель. Когда вы пишете ARR [5]
, компилятор переводит его в * (ARR + 5)
, то есть добавить 5 в int
указатель под названием ARR
и получите значение по этому адресу.
Причина, по которой это работает, заключается в том, что ART + 5
не означает означает «добавить 5 к значению ARM», это означает «добавить все равно необходимым к значению ARM Чтобы идти вперед 5 int
s ", или, точнее," Добавить 5 * sizeof (int)
к значению arr "