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

341
Visualizações
¿Dónde se almacena LÓGICAMENTE una cadena de caracteres que apunta?

En C, podemos usar char * para señalar una cadena. Al igual que

 char *s = "Hello";

.

Como puede verse, ni la variable se ubica dinámicamente en el montón porque no hay funciones dinámicas como malloc, ni está definida para señalar otra variable determinada.

Entonces mi pregunta es, ¿dónde está almacenada lógicamente la cadena literal a la que apunta la variable [char *s]?

¿Se almacena en la pila como cualquier variable local normal? o, algo así como pila?


En realidad, soy un graduado del departamento de ingeniería informática, pero no he encontrado y he tenido demasiada curiosidad acerca de cómo [char * string] funciona lógicamente. Es un gran honor preguntar justo ahora.

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

0

La variable char* s se almacena en la pila, asumiendo que se declara en el cuerpo de una función. Si se declara en una clase, entonces se almacena donde se almacena el objeto de la clase. Si se declara como global, entonces se almacena en la memoria global.

De hecho, cualquier variable no static y no thread_local que declare en estas tres posiciones se comporta de la misma manera, independientemente de si es una primitiva (es decir, int ), un objeto (es decir, vector<int> ) o un puntero (es decir, const char* ). Si una variable es estática, siempre se almacena en el espacio global. Si una variable es thread_local , cada hilo obtiene su propia copia, y esa copia generalmente se almacenará en la base de la pila para el hilo correspondiente.

La cadena real "Hello" , a la que apunta s , se almacena en un espacio global constante en algún lugar, generalmente el segmento .data .

over 4 years ago · Santiago Trujillo Relatório

0

Los literales de cadena tienen una duración de almacenamiento estática . Eso significa que existen durante toda la vida útil de su programa. Pueden almacenarse en un área no escribible y pueden superponerse con otros literales de cadena. Dos instancias diferentes del mismo literal pueden o no coincidir.

Depende de su implementación (compilador/enlazador/etc). para tomar una decisión que cumpla con esos requisitos.

over 4 years ago · Santiago Trujillo Relatório

0

No hay nada especial en s , es un puntero, apunta a alguna parte. Tiene duración de almacenamiento automático como cualquier otra variable local no declarada static . Sin embargo, lo que es "especial" es el literal de cadena al que está apuntando.

Puede pensar en un literal de cadena como "foo" como una variable global sin nombre con algunas restricciones especiales. Estas restricciones son:

  • No puede escribir en el literal de cadena, como si se hubiera declarado como const
  • Dos literales de cadena pueden compartir la misma dirección o superponerse
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