Wants to create an application storing data in memory. But i dont want the data to be lost even if my app crashes. What concept should i use? Should I use a shared memory, or is there some other concept that suits my requirement better.
Wants to create an application storing data in memory. But i dont want the data to be lost even if my app crashes
679 Views Asked by user3131441 At
2
There are 2 best solutions below
3

Use memory mapped files - mmap
(https://en.wikipedia.org/wiki/Mmap) And allocate all your structures inside mapped memory region. System will properly save mapped file to disk when your app crashes.
Related Questions in C++
- Why throwing java.lang.IndexOutOfBoundsException when reading blob in the database hsqldb
- Caused by: org.hsqldb.HsqlException: cardinality violation
- When I use hsqldb I have problems with GUI (JavaFx)
- HSQL (in-memory) dramatically slows down when database grows
- Strange results with HSQL (memory) when running transactional test
- HSQL upgrade to 1.8: ... DEFAULT 'NaN' changed to ... DEFAULT 0E0/0E0 in database.script causes HsqlException: unexpected token / in HSQL 2.3.2
- How to integrate Kettle with H2
- Is it possible to use OracleDataSource for some other database except for Oracle?
- HSQLDB: Switching between testing database and production database
- TomEE in Eclipse always uses HSQL Database Engine instead of defined in persistence.xml (EclipseLink)
Related Questions in LINUX
- Why throwing java.lang.IndexOutOfBoundsException when reading blob in the database hsqldb
- Caused by: org.hsqldb.HsqlException: cardinality violation
- When I use hsqldb I have problems with GUI (JavaFx)
- HSQL (in-memory) dramatically slows down when database grows
- Strange results with HSQL (memory) when running transactional test
- HSQL upgrade to 1.8: ... DEFAULT 'NaN' changed to ... DEFAULT 0E0/0E0 in database.script causes HsqlException: unexpected token / in HSQL 2.3.2
- How to integrate Kettle with H2
- Is it possible to use OracleDataSource for some other database except for Oracle?
- HSQLDB: Switching between testing database and production database
- TomEE in Eclipse always uses HSQL Database Engine instead of defined in persistence.xml (EclipseLink)
Related Questions in SHARED-MEMORY
- Why throwing java.lang.IndexOutOfBoundsException when reading blob in the database hsqldb
- Caused by: org.hsqldb.HsqlException: cardinality violation
- When I use hsqldb I have problems with GUI (JavaFx)
- HSQL (in-memory) dramatically slows down when database grows
- Strange results with HSQL (memory) when running transactional test
- HSQL upgrade to 1.8: ... DEFAULT 'NaN' changed to ... DEFAULT 0E0/0E0 in database.script causes HsqlException: unexpected token / in HSQL 2.3.2
- How to integrate Kettle with H2
- Is it possible to use OracleDataSource for some other database except for Oracle?
- HSQLDB: Switching between testing database and production database
- TomEE in Eclipse always uses HSQL Database Engine instead of defined in persistence.xml (EclipseLink)
Related Questions in MEMORY-MAPPED-FILES
- Why throwing java.lang.IndexOutOfBoundsException when reading blob in the database hsqldb
- Caused by: org.hsqldb.HsqlException: cardinality violation
- When I use hsqldb I have problems with GUI (JavaFx)
- HSQL (in-memory) dramatically slows down when database grows
- Strange results with HSQL (memory) when running transactional test
- HSQL upgrade to 1.8: ... DEFAULT 'NaN' changed to ... DEFAULT 0E0/0E0 in database.script causes HsqlException: unexpected token / in HSQL 2.3.2
- How to integrate Kettle with H2
- Is it possible to use OracleDataSource for some other database except for Oracle?
- HSQLDB: Switching between testing database and production database
- TomEE in Eclipse always uses HSQL Database Engine instead of defined in persistence.xml (EclipseLink)
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
You are asking for persistence (or even orthogonal persistence) and/or for application checkpointing.
This is not possible (at least thru portable C++ code) in the general case for some arbitrary existing C++ code, e.g. because of ASLR, because of pointers on -or to- the local call stack, because of multi-threading, and because of external resources (sockets, opened files, ...), because the current continuation cannot be accessed, restored and handled in standard C++.
However, you might design your application with persistence in mind. This is a strong architectural requirement. You could for instance have every class contain some dumping method and its load factory function. Beware of shared pointers, and take into account that you could have cyclic references. Study garbage collection algorithms (e.g. in the Gc HandBook) which are similar to those needed for persistence (a copying GC is quite similar to a checkpointing algorithm).
Look also in serialization libraries (like libs11n). You might also consider persisting into textual format (e.g. JSON), perhaps inside some Sqlite database (or some real database like PostGreSQL or MongoDb....). I am doing this (in C) in my monimelt software.
You might also consider checkpointing libraries like BLCR
The important thing is to think about persistence & checkpointing very early at design time. Thinking of your application as some specialized bytecode interpreter or VM might help (notably if you want to persist continuations, or some form of "call stack").
You could fork your process (assuming you are on Linux or Posix) before persistence. Hence, persistence time does not matter that much (e.g. if you persist every hour or every ten minutes).
Some language implementations are able to persist their entire state (notably their heap), e.g. SBCL (a good Common Lisp implementation) with its
save-lisp-and-die
, or Poly/ML -an ML dialect- with its SaveState, or Squeak (a Smalltalk implementation).See also this answer & that one. J.Pitrat's blog has a related entry: CAIA as a sleeping beauty.
Persistency of data with code (e.g. vtables of objects, function pointers) might be technically difficult. dladdr(3) -with
dlsym
- might help (and, if you are able to code machine-specific things, consider the old getcontext(3), but I don't recommend that). Avoid name mangling (fordlsym
) by declaringextern "C"
all code related to persistence. If you want to persist some data and be able to restart from it with a slightly modified program (e.g. a small bugfix) things are much more complex.More pragmatically, you could have a class representing your entire persistable state, and implement methods to persist (and reload it). You would then persist only at certain steps of your algorithm (e.g. if you have a main loop or an event loop, at start of that loop). You probably don't want to persist too often (e.g. because of the time and disk space required to persist), e.g. perhaps every ten minutes. You might perhaps consider some transaction log if it fits in the overall picture of your application.