- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 32

Thema: C: Fragen zu memset, memcpy, malloc

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Das sind spezielle Überladungen, die kommen bei normalem Anfordern von Speicher nicht zum Einsatz. Es handelt sich um sowas hier:
    https://en.wikipedia.org/wiki/Placement_syntax

    Man kann in C++ ja sowas machen
    Code:
        #include <new>        // Must #include this to use "placement new"
        #include "Fred.h"     // Declaration of class Fred
        void someCode()
        {
          char memory[sizeof(Fred)];     // Line #1
          void* place = memory;          // Line #2
          Fred* f = new(place) Fred();   // Line #3 (see "DANGER" below)
          // The pointers f and place will be equal
          // ...
        }
    das ist eine andere Baustelle.


    Im übrigen ist es meist so, dass new und delete auf malloc und free zurückgreifen, oder auf die Betriebssystemfunktionen die diesese beiden verwenden.

    Aber new und delete rufen auch Konstruktor und Destruktor der angelegten Objekte auf. Ein malloc würde nur Speicher anfordern, das Objekt darin aber nicht initialisieren. Ein free auf etwas mit new angefordertem würde einem Objekt den Speicher klauen, läuft doch später noch der Destruktor knallt es, usw.
    Geändert von Mxt (29.06.2016 um 08:24 Uhr)

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Interessant, schaue ich mir demnächst mal genauer an...

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Wichtig für dich ist nur, dass du dann auch wirklich C machst. Also einen C-Compiler verwenden und mit *.c Codedateien arbeiten.

    C++ ist (und war immer) nur eine Schnittmenge zu C, es ist kein größeres C. Es gibt Sachen, die sind in C und C++ anders.

  4. #4
    HaWe
    Gast
    das geht leider nicht:
    in Arduino habe ich gar keinen Einfluss drauf (ist immer gpp) und auf den Raspi portiert auch nicht immer (wenn Fremd-Libs C++ verwenden, muss ich auch g++ verwenden, ansonsten nutze ich GCC beim Pi ntl wo immer es geht.

    Meinen eigenen Code schreibe ich immer nur in ANSI C Syntax, das ist einfach clean + straight sozusagen.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    19.05.2015
    Beiträge
    69
    HaWe, das Du nur C++ in der Arduino IDE benutzen kannst ist nur bedingt richtig.
    Der Sketch wird durch den eigenen Präprozessor gejagt und dann das CPP-File durch den (kastrierten) g++.
    Wenn Du aber eine "*.c"-Datei dem Projekt hinzufügst, dann wird diese mit dem GCC und nicht dem g++ kompiliert. Bei *.cc *.cpp vice versa.
    Dementsprechend müssen dann die Header "extern "C" { ... }" oder auch nicht enthalten, sonst produziert der Linker freudig Fehlermeldungen.

    Gruß

  6. #6
    HaWe
    Gast
    aha, wieder etwas schlauer geworden - so in die Tiefen und Untiefen der Arduino-IDE bin ich gar nicht vorgedrungen, ich nutze einfach die Standard-Libs (egal welcher Code, ich guck auch normalerweise nicht nach C oder C++ da drin - viele verwenden allerdings C++, das sieht man ja schon an Serial, Wire und SPI.
    Auch .c Dateien schließe ich nicht ein, sondern ganz einfach nur 1 .ino Code - und soweit es mein eigener ist, verwende ich hier kein C++, sonden nur C code (plus Serial.print etc, Wire.begin etc., und die ganzen anderen unvermeidbaren automatisch eigebundenen Sketch-Klassen).

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Zitat Zitat von botty Beitrag anzeigen
    Wenn Du aber eine "*.c"-Datei dem Projekt hinzufügst, dann wird diese mit dem GCC und nicht dem g++ kompiliert. Bei *.cc *.cpp vice versa.
    Dementsprechend müssen dann die Header "extern "C" { ... }" oder auch nicht enthalten, sonst produziert der Linker freudig Fehlermeldungen.
    Ein Unterschied zwischen C und C++ liegt darin, dass C die Namen für Funktionen direkt aus dem Quelltext übernimmt.
    C++ erzeugt decoratet Labels, an den Funktionsnamen werden einfach noch Buchstaben angehängt, welche die Aufruf-Parameter angeben. Dadurch werden überladene Funktionen für den Linker unterschiedlich. Man braucht also keinen speziellen Linker für C++.

    Zudem war C++ ursprünglich eigentlich nur eine Art Preprozessor. Ein C++-Programm wurde in ein C-Programm umgesetzt, welches dann mit dem C-Compiler übersetzt wurde.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

Ähnliche Themen

  1. Problem mit arrays in memset
    Von HaWe im Forum Arduino -Plattform
    Antworten: 0
    Letzter Beitrag: 05.06.2016, 11:39
  2. Tauchroboter (Fragen über Fragen)
    Von Michi Unfried im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 12
    Letzter Beitrag: 20.02.2014, 21:03
  3. Rasenmähroboter fragen zur lenkung und mehr fragen :-)
    Von andiwalter im Forum Staubsaugerroboter / Reinigungs- und Rasenmähroboter
    Antworten: 11
    Letzter Beitrag: 11.05.2009, 18:25
  4. miniparser + malloc + speicherproblem?
    Von PCMan im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 09.01.2009, 14:03
  5. Fragen über Fragen - Schrittmotor
    Von Karierteshorts im Forum Motoren
    Antworten: 4
    Letzter Beitrag: 23.03.2005, 08:54

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test