[완료] C++에서 아주큰 문자열 처리에 대해서 조언좀 해주세요~

pogusm의 이미지

프로그래밍 초보이구요
qt로 연습중입니다

MFC에서의 CString과 같은 용도인것이
Qt에서는 QString라는게 있더라구요

아주큰 문자열은,
"0000001> 01-02-03-04-05-06" 같은 문자열입니다(로또번호)
총 8145060개의 경우의수를 1000개씩 나누어서 1~8146페이지로 나누어 출력하고 싶습니다.

그냥 매 페이지를 선택할때마다 8145060번의 루프를 돌면서,
페이지에 맞는 자료를 출력하는 방법도 가능하지만,
저는 반드시 문자열 배열로 저장해 놓고 사용하고 싶습니다.

QString result[8145060]; 같은 방법으론 안되더라구요..

그래서
QString result[8146]; 으로 선언한다음
result[i].append("0000001> 01-02-03-04-05-06,");
같은방법으로 하면, 거의 다운이 되더라구요
(프로그램응답이 없고, 작업관리자에서 리소스모니터를 해보면 메모리점유율만 계속 올라갑니다)

어떤방법을 사용해야 좋을까요?

ps. "0000001> 01-02-03-04-05-06," (27byte) * 8145060 = 219,916,620 byte 라는 계산이 나오는데, 이만큼 메모리를 잡아먹는다고 보는게 맞는 생각인가요?
그리고,
814만개 이상의 1억개정도를 처리한다고 한다면, 위와같은 계산으로 약 2기가 이상의 메모리를 점유/사용하게 되는건가요?

ssangdog의 이미지

file I/O 를...

진리가 아닐까요?

`o'

pogusm의 이미지

임시파일을 만들어서 사용하라는 말씀이신가요?

제가 기본개념이 없어서 그런데..
애초에 200메가정도되는 문자열같은건 대부분 파일로 처리하나요?

200메가byte정도의 자료를 반드시 QString 배열로 사용하는 방법은 없을까요?

pogusm의 이미지

1. "0000001> 01-02-03-04-05-06," (27byte) 같이 쓸데없는 문자가 포함된 문자열을 사용하지 않기로함
(1,2,3,4,5,6 값만 추출하여, 1바이트(char)씩 총 6바이트를 할당하기로함)
2. char *resultChar; 선언후
resultChar = (char *)malloc(8145060*6*sizeof(char)); 동적 할당후(48,870,360byte)
8145060경우의 수의 모든 로또번호를 밀어넣어도 정상작동함을 확인.

메모.
1. 메모리가 허락한다면 위와같은 방법으로 200메가 이상도 처리가 가능할듯.
2. QString로 잘 안되었던 이유는
첫째, 내가 잘 사용할줄 몰라서
둘째, QString같은 문자열 클래스에서 할당/재할당을 반복하는 과정에서 메모리누수및 지연(다운)현상이 발생한듯함.
3. 파일을 이용한 방법 역시 50메가~200메가의 파일을 생성하는데 걸리는 시간이 꽤 걸리기 때문에 효과적이지 못하였음.

rubenz의 이미지

그냥, 아래와 같이 선언 하시면 메모리가 허락 하는한 1Giga 정도는 될것 입니다.
static szStr[1024*1024*1024] ==> 1Giga
대신에 한번 이렇게 선언해서 사용 하시면, 프로그램이 죽기전까지는 주구 장창 메모리를 잡아 먹습니다.
저는 이런 방법으로 2Giga 까지 써 봤네요..(Unix)

pogusm의 이미지

static szStr[1024*1024*1024] 같은 방법도 한번 시도해 해봐야겠네요

감사합니다

라스코니의 이미지

라는 좋은 기능이 있지요.

char *s = new char [200 * 1024 * 1024];

char page[24*80];

strcpy(page, "");
strcat(page, "0000001> 01-02-03-04-05-06,\n");
...

memcpy(s, page, sizeof(page));

delete [] s;

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.