LINUX.ORG.RU

История изменений

Исправление xaizek, (текущая версия) :

Правильно ли я понимаю, что порядок размещения переменных в памяти зависит от порядка их объявления?

Правильно для элементов структур, для остального не обязательно.

Кроме того, ты раньше говорил, что локальные переменные размещаются «на стеке». Это какая-то отдельная область памяти, отличная от той, где выделяется место под глобальные переменные?

Ага, та же, которая отвечает за вызовы подпрограмм (передача аргументов через стек может происходить). Глобальные переменные не меняются в размере, поэтому с ними проще. А стек растёт/уменьшается постоянно.

Если так, то, получается, упорядочивать переменные для экономии памяти имеет смысл раздельно для глобальных и для локальных каждой функции?

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

Исправление xaizek, :

Правильно ли я понимаю, что порядок размещения переменных в памяти зависит от порядка их объявления?

Правильно для элементов структур и аргументов функции, для остального не обязательно.

Кроме того, ты раньше говорил, что локальные переменные размещаются «на стеке». Это какая-то отдельная область памяти, отличная от той, где выделяется место под глобальные переменные?

Ага, та же, которая отвечает за вызовы подпрограмм (передача аргументов через стек может происходить). Глобальные переменные не меняются в размере, поэтому с ними проще. А стек растёт/уменьшается постоянно.

Если так, то, получается, упорядочивать переменные для экономии памяти имеет смысл раздельно для глобальных и для локальных каждой функции?

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

Исправление xaizek, :

Правильно ли я понимаю, что порядок размещения переменных в памяти зависит от порядка их объявления?

Правильно для элементов структур, для остального не обязательно.

Кроме того, ты раньше говорил, что локальные переменные размещаются «на стеке». Это какая-то отдельная область памяти, отличная от той, где выделяется место под глобальные переменные?

Ага, та же, которая отвечает за вызовы подпрограмм (передача аргументов через стек может происходить). Глобальные переменные не меняются в размере, поэтому с ними проще. А стек растёт/уменьшается постоянно.

Если так, то, получается, упорядочивать переменные для экономии памяти имеет смысл раздельно для глобальных и для локальных каждой функции?

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

Исправление xaizek, :

Правильно ли я понимаю, что порядок размещения переменных в памяти зависит от порядка их объявления?

Правильно элементов структур, для остального не обязательно.

Кроме того, ты раньше говорил, что локальные переменные размещаются «на стеке». Это какая-то отдельная область памяти, отличная от той, где выделяется место под глобальные переменные?

Ага, та же, которая отвечает за вызовы подпрограмм (передача аргументов через стек может происходить). Глобальные переменные не меняются в размере, поэтому с ними проще. А стек растёт/уменьшается постоянно.

Если так, то, получается, упорядочивать переменные для экономии памяти имеет смысл раздельно для глобальных и для локальных каждой функции?

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

Исходная версия xaizek, :

Правильно ли я понимаю, что порядок размещения переменных в памяти зависит от порядка их объявления?

Правильно.

Кроме того, ты раньше говорил, что локальные переменные размещаются «на стеке». Это какая-то отдельная область памяти, отличная от той, где выделяется место под глобальные переменные?

Ага, та же, которая отвечает за вызовы подпрограмм (передача аргументов через стек может происходить). Глобальные переменные не меняются в размере, поэтому с ними проще. А стек растёт/уменьшается постоянно.

Если так, то, получается, упорядочивать переменные для экономии памяти имеет смысл раздельно для глобальных и для локальных каждой функции?

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