Salut � tous!
Je suis nouveau sur ce forum, et d�butant en C++. Je cherche les fonctions, une unit�, librairie pour acc�der � la RAM. J'ai besoin d'un acc�s tr�s rapide aux donn�es. Pouvez-vous me conseiller?
Merci de votre aide!![]()
Salut � tous!
Je suis nouveau sur ce forum, et d�butant en C++. Je cherche les fonctions, une unit�, librairie pour acc�der � la RAM. J'ai besoin d'un acc�s tr�s rapide aux donn�es. Pouvez-vous me conseiller?
Merci de votre aide!![]()
Je cherche les fonctions, une unit�, librairie pour acc�der � la RAM. J'ai besoin d'un acc�s tr�s rapide aux donn�esLe moyen direct en C++ pour acc�der � la RAM cela s'appelle un pointeur cher ami.Je suis nouveau sur ce forum, et d�butant en C++.
ex:
Donc conseil : prendre un bon livre sur le C++.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 char *p; p=NULL; p=new char[25]; ..... delete [] p;
Utiliser pour cela des listes cha�n�es.J'ai besoin d'un acc�s tr�s rapide aux donn�es
Sous Windows , on ne peut pas acc�der directement au mat�riel ( contrairement au DOS ).Sinon �crire des Device Drivers.
Sinon on peut mixer code assembleur machine et C++
Je confirme ce qu'a dit addicted_to_MFC quant � l'utilisation de l'asm dans ton code : y'a pas plus rapide(tu travailles avec les registres du processeur). Pour des fonctions pas trop complexes au d�but, il n'est pas tr�s difficile de se mettre � l'asm...
C'est ce que je pensais au d�but, mais apr�s des tests, je me suis rendu compte que l'allocation d'un pointeur utilisait plut�t la m�moire virtuelle malgr� les 40 Mo libres de ma RAM...Envoy� par addicted_to_MFC
Apr�s mes recherches sur le SDK, j'ai trouv� peut-�tre cette piste:
Qu'en pensez-vous? Suis-je sur la bonne voie?
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 Declare Function AllocateUserPhysicalPages Lib "kernel32.dll" _ (ByVal hProcess As Long, ByRef NumberOfPages As OUT, ByRef PageArray As PULONG_PTR ) As Long
Pourquoi veux tu exactement acc�der � la ram?
la fonction AllocateUserPhysicalPages est juste une fonction qui permet d'allouer des pages m�moires � un processus mais pas d' acc�der � des pages m�moires existantes.par le principe m�me des systemes prot�g�s tu ne pourra jamais acc�der � la m�moire allou�e par les autres processus que ton prog.et si tu trouvais un moyen ce serait une faille de s�curit� donc non portable.
Pour acc�der � la gestion m�moire il faut �tre en ring 0 et seul l'os y a acc�s.Je sais qu'il existait des bidouilles seur les systemes 9x qui permettait d'ex�cuter du code en ring 0 � partir du ring 3 par l'utilisation des call gate.
par contre il existe des techniques pour ecrire ou lire dans la m�moire d'un autre processus par les fonctions ReadProcessMemory et WriteProcessMemory � condition que la zone m�moire partag�e ait l'acc�s ecriture ou lecture
C'est exact , je me suis tromp� en partie car avec des OS comme Unix par ex. ( �a reste � v�rifier ) l'allocation d'un pointeur donne un acc�s direct � la m�moire.C'est ce que je pensais au d�but, mais apr�s des tests, je me suis rendu compte que l'allocation d'un pointeur utilisait plut�t la m�moire virtuelle malgr� les 40 Mo libres de ma RAM...
Sous Windows il est vrai on n'acc�de pas du tout directement � la m�moire physique mais plut�t � une m�moire virtuelle.
Tu sais ce que c'est un pointeur donc pas d�butant .et d�butant en C++. Je
Tu ne te serais pas en train de te payer notre t�te ?
Charon a tout juste quand il dit que parce que syst�me prot�g� tu ne peux pas acc�der aux pages m�moires.
Je pense qu'un des moyens les plus rapides pour effectuer des traitements ( ce n'est pas acc�der � des donn�es mais ces donn�es il faut les traiter -but de l'informatique ) c'est l'utilisation de Threads avec un certain niveau de priorit�
Et le but des manoeuvres dans tout cela c'est quoi ???
Envoy� par addicted_to_MFC
Je ne me permettrais s�rement pas de me payer votre t�te!
Oublie d�finitivement la gestion m�moire avec himem.sys �a appartient largement au pass�Avec TP sous dos, j'utilisais le driver Himem.sys, et les fonctions qui vont avec... Les variables utilisent la m�moire conventionnelle, donc pas de probl�mes de rapidit�!
Non monsieur :Pour te d�montrer l'utilit� d'acc�der � la RAM, imagine un programme d'animation, o� toutes les images sont charg�es en RAM, puis sont affich�es � l'�cran � grande vitesse (comme un player de vid�o divx ou mpg .Ces programmes ne peuvent se faire qu'avec un acc�s direct de la m�moire physique (et non virtuelle).
Ceci �tait valable sous DOS mais pas sous Windows.
Parce que si on peut stocker des images bitmaps en m�moire et admettons directement dans la RAM , apr�s il faut les afficher � l'�cran.
Probl�me parce que p�riph�riques vid�os diff�rents les uns des autres.
Effectivement sous DOS on pouvait acc�der gr�ce � un pointeur sur la m�moire vid�o ( adresse A000:000 )et afficher de cette mani�re un buffer .
Mais sous Windows c'est impossible parce que surcouche logicielle ind�pendante du mat�riel.
Windows fait la translation entre une proc�dure �crite en Delphi ou en C++ entre le GDI et le mat�riel.
Pour jouer une vid�o le plus simple et plus performant est d'utiliser DirectShow.
Pour stocker des images en m�moire , fonctions GDI ou "surfaces " DirectDraw.
Mieux vaut consacrer une partie pour son projet et une autre pour la recherche d'un emploi ( SSII ou autre) . Car pour commercialiser un projet informatique ( donc un logiciel ) , il faut pr�senter quelque chose de b�ton.Ca fait plus d'un an que je suis au chomage, et ce projet est la seule chose qui me permet de tenir le coups!
tout � fait d'accord!
Tu sais, m'expliquer vos th�ories sur l'utilisation ne m'aide pas plus que �a, je te rappel que j'ai toujours besoin de la RAM en acc�s direct, et rien d'autres...
si tu veux acc�der � la ram en acc�s direct cr�e un driver avec le ddk de microsoft,les drivers s'ex�cutent dans un ring plus privil�gi� et y ont donc acc�s ou du moins par l'api fourni par les drivers.Mais il faut que tu saches que la m�moire en mode prot�g� n'est pas lin�aire,Il y a un syst�me de pagination et segmentation.Ensuite puisque tu veux acc�der apparemment � la m�moire video directement je dirais l� m�me chose que addicted_to_MFC utilise directx c'est fait pour ��.
Merci pour toutes vos r�ponses!
En fait, c'est pas pour de la video, mais pour charger des samples en RAM...
Si il faut que je fasse un driver, alors comment faire?
pour la gestion m�moire au niveau des drivers regarde l�:
http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/k106_544y.asp
pour la doc complete du ddk regarde � driver development kit sur le meme site.
sinon le ddk lui m�me �tait t�l�chargeable sur le site de msdn mais je crois maintenant qu'il faut le commander.
par contre je voudrais juste te poser quelques questions pour �clairer ma lanterne au risque d'�tre pris pour un boulet.Je ne vois pas du tout pour tes samples audio pourquoi tu n'utiliserais pas la gestion normale de la m�moire en utilisant new.est-ce parce que la m�moire � laquelle tu veux acc�der est de la m�moire E/S(tu parlais d'interfaces electroniques).quand tu dis acc�der � la ram,tu veux faire quoi exactement ? acc�der � une adresse bien pr�cise?O� est ce que tu veux �tre certain que la page correspondante � ta zone m�moire ne sera jamais stock�e sur le disque et recharg�e acc�l�rant ainsi l'acc�s?
dans les 2 cas,je crois qu'au niveau d'un driver il y a des fonctions qui permettent d'assigner une zone de m�moire physique.Ceux sont les m�mes qu'utilisent g�n�ralement les developpeurs de drivers pour r�server la m�moire entr�e-sortie de leur matos.
sinon au passage dans windows l'interface audio/video est g�r� par la technologie mci.On acc�de � cette technologie par une api windows pr�vue et de l'autre cot� il y a des drivers MCI developp�s avec le ddk
qui communiquent avec des cartes sons,t�l�s..Je crois qu'il existe dans les mci une notion de mixer.peut �tre devrais-tu developper ton propre driver mci.Tu devrais te renseigner la dessus.
Quand on est t�tu c'est pour la vie !Tu sais, m'expliquer vos th�ories sur l'utilisation ne m'aide pas plus que �a, je te rappel que j'ai toujours besoin de la RAM en acc�s direct, et rien d'autres...
charon a sugg�r� de d�velopper un Device Driver , chose tr�s ardue.
Bonne chance pour faire cela !! ( fais moi-signe quand tu auras termin�)
De plus acc�der DIRECTEMENT � la m�moire RAM ne sert � rien car l'OS d�place les blocs de m�moire en fonction des besoins.
Comme l'a sugg�r� charon , utiliser les commandes MCI.En fait, c'est pas pour de la video, mais pour charger des samples en RAM...
Sinon avoir recours � Direct Sound.
L'int�r�t de Direct X comme son nom l'indique est un acc�s direct au mat�riel en outrepassant les couches logicielles.
Les �quipes de d�veloppement de Microsoft sont � mon avis plus � m�me de d�velopper des technologies pour leur OS que le moindre programmeur dans son coin et ses drivers.
Moralit� : s'acheter un bon livre de programmation Windows comme le Petzold !
J'aurais peut-�tre du commencer par l�: J'ai besoin de charger des samples en m�moire pour faire le mixage en temps r�el. Encore merci de votre aide! �+
S'il ya un retard sur le mixage des �chantillons , il faut avoir recours � ce moment-l� � la programmation de threads ou autres processus ( j'ai d�j� indiqu� cette m�thode ) . Car en d�finit le coeur du probl�me n'est pas d'acc�der rapidement � la m�moire mais plut�t le traitement d'un �chantillon ( application de filtres de traitements , calculs etc...).
Pour cela avoir recours � des threads : avec Delphi/VCL il y a la classe TThread.
Attention avec l'utilisation de librairies tierces comme Midas : il faut payer des royalties en utilisation commerciale !
Partager