Avatar billede petey Nybegynder
17. februar 2004 - 16:42 Der er 21 kommentarer

Oprette et array et vilkårligt sted i hukommelsen

Jeg ønsker, at oprette et long array med x pladser på en bestemt adresse y i hukommelsen. Hvordan gør jeg det ?
Avatar billede petey Nybegynder
17. februar 2004 - 16:43 #1
Glemte at skrive, atdet selvfølgelig skal være i C.
Avatar billede arne_v Ekspert
17. februar 2004 - 16:49 #2
Hvilken platform ? Løsningen vil uden tvivl være platform specifik ?
Avatar billede arne_v Ekspert
17. februar 2004 - 16:50 #3
Er adresse y er virtuel eller en fysisk adresse ?

Ligger der noget i forvejen som skal mappes eller skal det initialiseres ?
Avatar billede petey Nybegynder
17. februar 2004 - 17:02 #4
adresse y er en fysisk adresse.
Avatar billede petey Nybegynder
17. februar 2004 - 17:03 #5
Der ligger ikke noget i forvejen fra y og et godt stykke frem. Dette må du gerne antage.
Avatar billede arne_v Ekspert
17. februar 2004 - 17:21 #6
Windows ? Linux ? X ?
Avatar billede petey Nybegynder
17. februar 2004 - 17:36 #7
linux
Avatar billede arne_v Ekspert
17. februar 2004 - 18:32 #8
Brug /dev/mem
Avatar billede arne_v Ekspert
17. februar 2004 - 18:34 #9
Avatar billede petey Nybegynder
17. februar 2004 - 19:31 #10
Jeg tænker nu bare på følgende: Hvis man har en variabel x, så angiver &x adressen på x i hukommelsen. Er det ikke muligt på en eller anden måde ved hjælp af pointer notation (vil jeg tro), at gøre sådan at man definere x til at ligge på en egen valgt adresse ?
Avatar billede arne_v Ekspert
17. februar 2004 - 19:47 #11
fysisk adresse : nej
virtuel adresse : måske (men jeg ved ikke om eller hvordan man gør på Linux)
Avatar billede bertelbrander Praktikant
17. februar 2004 - 20:26 #12
int *x = (int *)0x1234;

Men om man opnår noget som helst er mere end tvivlsomt.
Avatar billede bertelbrander Praktikant
17. februar 2004 - 20:28 #13
Man kan ikke gøre det med et array, når man laver et array allokerer man hukommelse.

Men pointeren virker lige så godt (eller ikke).
Avatar billede arne_v Ekspert
17. februar 2004 - 20:29 #14
Den konstruktion ligger jo ikke x på en bestemt adresse, men lader
x pege på en bestemt adresse.
Avatar billede bertelbrander Praktikant
17. februar 2004 - 20:32 #15
Virkningen er vel den samme som at ligge et array på en fast addresse.
Avatar billede arne_v Ekspert
17. februar 2004 - 20:36 #16
Hvis det er en virtuel adresse, så kan man præcis det samme med den.
Avatar billede petey Nybegynder
18. februar 2004 - 09:43 #17
arne_v jeg er ikke sikker på, at jeg forstår, hvad du mener.
Avatar billede arne_v Ekspert
18. februar 2004 - 10:10 #18
Mener med hvad ?
Avatar billede petey Nybegynder
18. februar 2004 - 12:24 #19
med al din snak om hvilket operativ system, virtuel og fysisk adresse.
Avatar billede arne_v Ekspert
18. februar 2004 - 18:50 #20
Det vil være lidt omfattende at forklare forskellen på fysiske og virtuelle
adresser.

Kan du forklare hvad du skal bruge det til ? Fordi så kan vi måske
nemmere sortere lidt i løsningerne. Muligvis skal du bare bruge Bertels
metode.
Avatar billede segmose Nybegynder
19. februar 2004 - 13:34 #21
Mener du sådan noget:

// for at vi kan lave evt. check.
long *Void2LongPtr(void *ptr) {
  return (long *)ptr;
}

int main() {
  // vi ved at på adresse 0x43218765 ligger et spændende array af long, fx. grafik kort hukommelse.
  long
    *grf;

  grf = Void2LongPtr(0x43218765);

  grf[17]= 0xFFFFFFFF; // sæt pixel

  return 0;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester