Pull to refresh

Comments 7

Скорее всего, требует исправления перевод:
Каждая система в настоящее время организована с таким макетом памяти как “код — стек — куча”, и это расстраивает.

Оригинал:
Every system nowadays is organized with a code-stack-heap memory layout like this, in its deepnesses.

Да, не заметил, что она уже есть(

Видеодаптеры с отображением в основную память, на +тех+ майнфреймах, которые весили несколько тонн? php никогда не избавится от SIGSEGV.
А в нём его никогда и не было. Единственный раз когда я его встречал — это в альфе 7ки.
Очень хорошая статья. А пример на Линукс и правда очень хорошо подходит.
Можно увидеть ещё больше информации о запущенном процессе с помощью ключа -ХХ:
pmap -XX 1937 > ~/Testprj/processinfo.txt
Кроме того стоит обратить внимание на такое явление. Для одной и той же программы из статьи пытался определить адрес стека. С помощью pmap получил такой результат:
00007fffbd6a0000 132 12 12 rw--- [ stack ]
В коде же результат немного другой:
Stack is at 0x7fffbd6be99c

Помню, в университете рассказывали, что регистр ebp (В 64бит ОС он называется rbp) как-то связан со стеком… Можно попробовать модифицировать немного код:

#include <cstdio>
#include <stdint.h>
int main() {
  int i=3;
  int* someptr = new int(l);
  printf ("==Exploring system addressing stuff==\n");
  printf("Code is at %p \n", (void*)main);
  printf("Stack is at %p \n", (void*)&i);
  printf("Heap is at %p \n", someptr);
  uint64 t basepointer64 = 0;
  //source first, dest last, move 64 bit from rbp to value
  __asm__ __volatile__("movq %%rbp, %0":"=r"(basepointer64));
 printf("RBP is at: %0lx \n", basepointer64);
 delete someptr;
 getchar();
 return 0;
}


Тогда результаты будут такие:
==Exploring system addressing stuff==
Code is at 0x557f7fde282a
Stack is at 0x7ffeebd0c164
Heap is at 0x557f81812e70
RBP is at: 7ffeebd0c180

При этом pmap показывает, что наиболее близкие адреса сегментов это:
7ffeebcee000 [stack]
7ffeebd6d000 [vvar]
7ffeebd70000 [vdso]

В коде выводится адрес переменной, лежащей на стеке. Всё что выше — техническая информация, используемая ОС для запуска программы. Хотя и странно, что она занимает 100к памяти.

Sign up to leave a comment.

Articles

Change theme settings