구조체를 이용해서 DB 비슷한 개념으로 사용하려고 합니다..

facered79의 이미지

어떤 구조체를 그 프로그램이 실행되는 동안에

DB 와 비슷한 형태로 사용을 한다고 했을때..

(프로그램이 끝날때까지 정보를 저장하고 있어야 한다.)

만약 그 구조체의 메모리를 malloc 이나 new 로 생성할 경우

free,delete 를 해줘야 하는데 그렇게 한다면..

DB 로서의 데이터 저장소의 의미를 상실 하게 됩니다..

구조체의 변수들은 각각 몇개의 값을 저장하게 될지 모르는 상태이

이고.. 현재 (SlotInfo[]) 이런식으로 선언이 되어 있습니다. 몇개의 슬롯에대한 정보가 들어올지 알지 못하는 상황)

이럴 경우 어떤 방법을 사용하면 좋을까요..

질문에 부족한 내용이 있다면 다시 올리겠습니다.

욱성군의 이미지

메모리를 할당한다고해서 그게 db 로서의 역할을 잃어버리게 된다는 것이.. 이해가 잘 안가는 군요.

facered79의 이미지

메모리를 할당하는 시점에서는

db의 의미를 잃는것은 아닙니다..

제가 말하고 싶은것은

메모리를 할당한후

free나 delete 를 사용하는 시점에서 db의 역할을 잃어버리는것이 아니냐는

말입니다..

db는 프로그램이 사용자의 요구로 프로그램이 끝나기 직전까지 살아있어야 하

는데.. 그전에 free delete 를 사용하게 되면 db를 사용하는 목적에 어긋난다는

말이에요..

이에 대한 해결책은 없는것인가요..

mirr의 이미지

프로그램종료시 메모리를 해제하고 반환시켜주는 방법은요? ㅡ,.ㅡ::
뭔가 다른 처리가 사이에 껴있는건가요?
중간에 메모리해제를 시켜줘야 하는 경우가?

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

서지훈의 이미지

shared-memory와 file을 이용하시면 될듯 하군요.
일반적으로는 shared-memory에서 작업을 하고, file은 백업용으로 이용을 하시는 방법을 하시면 되지 않을지요?

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

dasomoli의 이미지

그럼 free 나 delete 을 프로그램이 끝나기 전까지 안하면 되잖아요-_-?

너무 단순한가 8)



dasomoli의 블로그(http://dasomoli.org)
dasomoli = DasomOLI = Dasom + DOLI = 다솜돌이
다솜 = 사랑하옴의 옛 고어.
Developer! ubuntu-ko! 다솜돌이 정석
facered79의 이미지

sharde-memory.. 를 사용하기에는 그 의미가 좀 좁아요..

여러개의 소프트웨어 블럭이 있을때 한개의 A라는 블럭이 사용할

LOCAL_DB 개념의 구조체를 정의해서 사용하는 것이에요

그 구조체의 내용을 다른 블럭에서 직접 볼 필요는 없고 A블럭을 통해서

알아가면 되거든요..

그리고 미르님이 말씀해 주신 것에 대한 내용은 이렇습니다..

A블럭 이외의 블럭에서 올라오는 정보들을 DB(구조체)에 일일이 저장하게

되는데요. 그런 여러 작업들을 하는 소스가 하나의 함수 하나의 소스파일에

들어 있지 않아요..

이런 상황에서.. 프로그램 종료시 각각의 다른 장소에서 메모리 할당된 공간들

을 반환 할수 있는건가요? ㅜㅜ;;

elien의 이미지

간략하게 말씀드리자면,
정적으로 할당된 변수의 경우, 사람이 관여하지 않아도 메모리의 할당과 해제가 자유롭게 됩니다.
만약 함수 안에서 쓰는 로컬 변수라면 함수가 끝나는 시점에서 사라지게 되겠지요.
그렇지만 동적으로 할당된 변수의 경우, 해제해주기 전까지는 사라지지 않습니다.
함수가 끝나고 나서도 리턴값이나 기타 등등의 방법을 이용하여 그 포인터만 가지고 있다면 변수를 잃어버리지 않을 것입니다.
다만 주의하셔야 할 점은 memory leak 을 조심하셔야 한다는 것 정도...

p.s 주제넘은 말씀인지는 모르겠습니다만, 포인터와 메모리 할당에 대한 자료를 찾아보시길 권합니다.

훗, 못 믿겠나?

lovemyin의 이미지

어차피 DB의 역할이 필요하시다면 구조체를 이용하여 억지로 DB의 역할을 만드는 것은 그리 옳다고 생각하지 않습니다.

버클리 DB는 간단한 C 라이브러리 또는 C++ 라이브러리를 통해서 쉽게 조작 가능합니다. 그리 무겁지는 않으니 한번 사용해 보세요...

/***************************************************
* 가장 심플한 것이 가장 아름다운 것이다.
***************************************************/

tinywolf의 이미지

아 과연 무슨 내용일까.. 왜 안된다는 거지? 하면서 곰곰히 봤는데.. 이제 이해되는군요..
동적 메모리는 프로그램이 종료하더라도 반환하지 않을 수 있습니다.. (바로 메모리릭이지요..)
함수나 다른 소스로 넘어간다고 꼭 free, delete를 해야하는 것은 아니니까 포인터 파라미터나 리턴값으로 충분히 원하는 구현을 할 수 있으실 것같군요..
제 때 제대로 해제해 주려면 골치 좀 써야겠지만요.

동적 할당의 좋은 점이 크기가 조절 가능하고 같은 프로세스 내에서는 유지할 수 있다는 점이니까..
다른 프로세스까지 공유해야 한다면 공유 메모리가 좋은 대안이겠구요..

그리고 파일을 사용할 수 있는 환경이라면 버클리 파일 DB를 쓰는 것도 괜찮은 생각인듯..

ㅡ_ㅡ;

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.