Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

623
Visualizações
¿Dónde se almacenan las funciones en la memoria?

¿Dónde se almacenan las funciones en la memoria en c? ¿Alguien puede explicarlo en un lenguaje simple?

 #include stdio.h> void g() { int a=7; } int main() { printf("%d\n",sizeof(g())); printf("%p",&g); return 0; }

La salida del siguiente programa es

 1 00007ff6ee001581

y donde la variable dentro de la función se almacena y se vincula con la dirección de la función

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

La variable dentro de la función se almacena en la pila.

Y cada parte de enlace y direccionamiento se realiza mediante el enlazador.

En palabras simples, el enlazador decide qué dirección absoluta dar a qué etiqueta o función y el compilador decide cómo se organizarán y cómo podrán dirigirse entre sí.

La compilación requiere cuatro pasos:

 Preprocessing [in which header file and microprocessor worked upon]. Compiling[In which they are converted into assembly code] Assembly[In which codes are converted into machine level language but have relative addressing in respect to there starting] Linking[When absolute address is given so when loaded they can address each other and files and linked in one]

#creo que estas ultimas lineas te pueden ayudar

Las funciones y las variables son etiquetas y cada etiqueta se traduce en dirección. El código que se ejecuta en la máquina tiene una dirección que representa estas etiquetas. Y no solo c, sino que todos los lenguajes compilados pasan por él. Como en la máquina, su código de máquina o simplemente cableado.

Di si no entendiste nada. Estaré encantado de ayudarte.

over 4 years ago · Santiago Trujillo Relatório

0

La salida del siguiente programa es

La segunda línea de salida es un puntero al código de la función g . Es la dirección de esa función, y es la respuesta literal a su pregunta sobre dónde se almacena la función.

y donde la variable dentro de la función se almacena y se vincula con la dirección de la función

La variable a es una variable local, por lo que solo existe mientras se ejecuta la función. Por lo general, el compilador creará espacio para las variables locales en la pila; esa es una de las razones principales para tener una pila. Una vez que la función regresa, sus variables locales se sacan de la pila y dejan de existir. En otras palabras, a no está conectado a la ubicación de g en absoluto.

Por lo general, se hace referencia a las variables locales a través de algún desplazamiento desde el puntero de la pila. Cuando llama a una función, se crea un marco de pila en la pila. El marco de pila consiste básicamente en el almacenamiento de todas las variables locales de la función, y también la dirección del puntero de pila anterior y la dirección de retorno. Luego, el código de la función comienza a ejecutarse y, dado que el compilador conoce la dirección relativa de cada variable (es decir, dónde se encuentra en el marco de la pila), puede calcular fácilmente la dirección absoluta. La mayoría de los procesadores tienen instrucciones que facilitan el direccionamiento relativo precisamente por esta razón. Cuando la función sale, el puntero de la pila vuelve al marco de la pila anterior y el procesador salta a la dirección de retorno. Pero esta es solo una posible implementación; en los procesadores modernos que tienen muchos registros, es posible que las variables locales ni siquiera se almacenen en la pila; es posible que terminen en registros.

over 4 years ago · Santiago Trujillo Relatório

0

include <stdio.h> void g() { int a=7; } int main() { //printf("%d\n",sizeof(g())); //you cant use sizeof(g()) its a functiona and //function not have anysize printf("%p",&g); //even you can't use here int a=7 that you declared in void g() as it is local to //that function and this function cant access any function local variable //but what it returns return 0; }

Si desea ver el direccionamiento, vea esto:

 0000000000001135 <g>: 1135: 55 push %rbp 1136: 48 89 e5 mov %rsp,%rbp 1139: c7 45 fc 07 00 00 00 movl $0x7,-0x4(%rbp) 1140: 90 nop 1141: 5d pop %rbp 1142: c3 retq 0000000000001143 <main>: 1143: 55 push %rbp 1144: 48 89 e5 mov %rsp,%rbp 1147: 48 8d 35 e7 ff ff ff lea -0x19(%rip),%rsi # 1135 <g> 114e: 48 8d 3d af 0e 00 00 lea 0xeaf(%rip),%rdi # 2004 <_IO_stdin_used+0x4> 1155: b8 00 00 00 00 mov $0x0,%eax 115a: e8 d1 fe ff ff callq 1030 <printf@plt> 115f: b8 00 00 00 00 mov $0x0,%eax 1164: 5d pop %rbp 1165: c3 retq 1166: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 116d: 00 00 00
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda