Wat is Variabele?

Een benoemde container die in een programma een waarde bewaart. Ze wordt gedeclareerd met een type zoals integer of real en door toekenning gewijzigd. Als er een nieuwe waarde wordt toegekend, gaat de vorige verloren.

Japanse benaming: 変数

“Variabele” komt voor in 74 oefenvragen uit 12 onderwerpen, bijv. Basis van programmeren (pseudocode traceren), Linker, loader en uitvoerbare formaten, Multicore en synchronisatie.

Vakgebied: Basis van programmeren (pseudocode traceren)

Nu oefenen: vragen over Variabele

Als een met optimalisatie gecompileerd programma met een debugger wordt onderzocht, wordt de waarde van sommige variabelen soms als "niet beschikbaar" weergegeven. Wat is de belangrijkste reden?

  1. ABij optimalisatie kan de debugger het programma helemaal niet meer inlezen
  2. BDe waarden van variabelen veranderen bij elke compilatie willekeurig
  3. CDe waarde is niet meer aanwezig door hergebruik van registers of het verwijderen van berekeningen
Antwoord en toelichting tonen

Antwoord: C. De waarde is niet meer aanwezig door hergebruik van registers of het verwijderen van berekeningen

Bij optimalisatie worden variabelen niet in het geheugen geplaatst maar alleen in registers behandeld, en wordt het register na gebruik voor een andere waarde hergebruikt. Door constant propagation kan een berekening ook helemaal verdwijnen. Op het moment dat de debugger stopt, kan de waarde van die variabele daarom nergens meer bestaan, en er wordt bijvoorbeeld "wegoptimaliseerd" weergegeven. Bij debuggen wordt gewoonlijk de optimalisatie verzwakt of een optimalisatie-instelling voor debuggen gebruikt. De debugger kan het programma wel inlezen.

In welke sectie wordt in het algemeen de globale variabele „int limit = 100;” geplaatst, buiten een functie in C geschreven?

  1. ADe .data (data met beginwaarde)
  2. BDe .bss (data zonder beginwaarde)
  3. CDe .text (machinecode)
Antwoord en toelichting tonen

Antwoord: A. De .data (data met beginwaarde)

Globale en statische variabelen met een beginwaarde ongelijk aan 0 komen in de .data-sectie en hun beginwaarde wordt in het bestand opgeslagen. Bij het laden van het programma wordt deze inhoud ongewijzigd naar het geheugen gekopieerd, dus bij de start van main is limit 100. .data kan tijdens uitvoering worden herschreven en is dus een gebied waarin lezen en schrijven is toegestaan.

“Variabele” in de toelichting

Vragen met “Variabele” (74)

  1. Als een met optimalisatie gecompileerd programma met een debugger wordt onderzocht, wordt de waarde van sommige variabelen soms als "niet beschikbaar" weergegeven. Wat is de belangrijkste reden?
  2. In welke sectie wordt in het algemeen de globale variabele „int limit = 100;” geplaatst, buiten een functie in C geschreven?
  3. Welke combinatie van de bovenstaande globale variabelen staat in het algemeen in de .bss-sectie?
  4. Waar wordt tijdens uitvoering een in een C-functie gedeclareerde lokale variabele (automatische variabele) zonder static geplaatst?
  5. Welke uitspraak is juist over de waarde bij het eerste gebruik van lokale en globale variabelen in C waarvoor geen beginwaarde is geschreven?
  6. Twee cores hebben elk in hun eigen cache een kopie van variabele x. Welk probleem kan optreden wanneer core 1 x leest nadat core 0 naar x heeft geschreven, als er geen cachecoherentiemechanisme is?
  7. De bovenstaande code verdubbelt de gedeelde variabele counter met CAS(&p, verwachte waarde, nieuwe waarde). Wanneer mislukt CAS en wordt de lus opnieuw doorlopen?
  8. Bij een 8-bits microcontroller verhoogt een timerinterrupt een 32-bits variabele ticks met 1 en berekent het hoofdprogramma de verstreken tijd door ticks te lezen. Wat is de juiste oorzaak van het soms lezen van een sterk afwijkende waarde?
  9. Het volgende programma schuift waarden door over drie variabelen. Welke waarden hebben a, b en c nadat het is uitgevoerd?
  10. In de volgende geneste lus begint de binnenste lus bij de variabele i van de buitenste lus. Wat is de waarde van c nadat het programma is uitgevoerd?
  11. ÷ staat voor deling; bij toekenning aan een variabele van het type integer (ook een argument) worden de cijfers achter de komma weggelaten. Wat is de retourwaarde als de volgende functie f wordt aangeroepen als f(9087)?
  12. ÷ staat voor deling; bij toekenning aan een variabele van het type integer (ook een argument) worden de cijfers achter de komma weggelaten. Wat is de retourwaarde als de volgende functie toBin wordt aangeroepen als toBin(12)?
  13. ÷ staat voor deling; bij toekenning aan een variabele van het type integer (ook een argument) worden de cijfers achter de komma weggelaten. Hoe vaak wordt pow aangeroepen, de eerste aanroep meegerekend, als de volgende functie pow wordt aangeroepen als pow(2, 10)?
  14. ÷ staat voor deling; bij toekenning aan een variabele van het type integer (ook een argument) worden de cijfers achter de komma weggelaten. Het volgende programma zoekt in de oplopend gesorteerde integer-array data (indexen beginnen bij 1) de index van de eerste waarde die minstens x is, en zet die in lo. x is niet groter dan het laatste element van data. Wat moet er op de plaats van 【a】 in het programma staan?
  15. Een stack wordt voorgesteld door de integer-array st met 5 elementen en de variabele top van het type integer. Alle elementen van st zijn aanvankelijk 0, en top begint bij 0. push(v) telt 1 op bij top en voert dan st[top] ← v uit; pop() geeft de waarde van st[top] terug en trekt dan 1 af van top (de elementen van st veranderen niet). Wat zijn top en st nadat het volgende programma is uitgevoerd?

Verwante termen

Stack (stapelgeheugen) Array Argument Recursie Microcontroller (MCU) Retourwaarde (return value) Pointer Linker Modulo-operatie volatile (type qualifier)

Naar de woordenlijst