08-26-2001
limits on array sizes
The answer is No and Yes. Theoretically,
there is no limit. However, the kernel may be
configured to allow only a limited amount
of memory per process and/or user. You can find
out what the system resource limits are on your
particular UNIX system using the system
call "getrlimit()" (man section 2). The following
C program can be compiled and run as any ordinary
user...
================== SNIP ========================
/*
* Filename - getlimits.c
*
* Description - display system resource limits and
* test allocating large blocks of memory.
*
*/
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
main(int argc, char **argv)
{
struct rlimit rlim;
void *p;
getrlimit(RLIMIT_CPU, &rlim);
printf("CPU: cur - %ld max - %ld\n", rlim.rlim_cur, rlim.rlim_max);
getrlimit(RLIMIT_FSIZE, &rlim);
printf("FSIZE: cur - %ld max - %ld\n", rlim.rlim_cur, rlim.rlim_max);
getrlimit(RLIMIT_DATA, &rlim);
printf("DATA: cur - %ld max - %ld\n", rlim.rlim_cur, rlim.rlim_max);
getrlimit(RLIMIT_STACK, &rlim);
printf("STACK: cur - %ld max - %ld\n", rlim.rlim_cur, rlim.rlim_max);
getrlimit(RLIMIT_CORE, &rlim);
printf("CORE: cur - %ld max - %ld\n", rlim.rlim_cur, rlim.rlim_max);
#ifdef LINUX
getrlimit(RLIMIT_RSS, &rlim);
printf("RSS: cur - %ld max - %ld\n", rlim.rlim_cur, rlim.rlim_max);
getrlimit(RLIMIT_NPROC, &rlim);
printf("NPROC: cur - %ld max - %ld\n", rlim.rlim_cur, rlim.rlim_max);
#else
getrlimit(RLIMIT_VMEM, &rlim);
printf("VMEM: cur - %ld max - %ld\n", rlim.rlim_cur, rlim.rlim_max);
getrlimit(RLIMIT_AS, &rlim);
printf("AS: cur - %ld max - %ld\n", rlim.rlim_cur, rlim.rlim_max);
#endif
getrlimit(RLIMIT_NOFILE, &rlim);
printf("NOFILE: cur - %ld max - %ld\n", rlim.rlim_cur, rlim.rlim_max);
#ifdef LINUX
getrlimit(RLIMIT_MEMLOCK, &rlim);
printf("MEMLOCK: cur - %ld max - %ld\n", rlim.rlim_cur, rlim.rlim_max);
#endif
if((p = malloc(100000000)) == NULL)
{
printf("malloc 100M failed\n");
}
else
{
printf("malloc 100M succeeded\n");
}
if(p) free(p);
if((p = malloc(500000000)) == NULL)
{
printf("malloc 500M failed\n");
}
else
{
printf("malloc 500M succeeded\n");
}
if(p) free(p);
return 0;
}
================== SNIP ========================
The output (on Linux) should look somthing like...
$ getlimits
CPU: cur - 2147483647 max - 2147483647
FSIZE: cur - 2147483647 max - 2147483647
DATA: cur - 2147483647 max - 2147483647
STACK: cur - 8388608 max - 2147483647
CORE: cur - 1024000000 max - 2147483647
RSS: cur - 2147483647 max - 2147483647
NPROC: cur - 2048 max - 2048
NOFILE: cur - 1024 max - 1024
MEMLOCK: cur - 2147483647 max - 2147483647
malloc 100M succeeded
malloc 500M succeeded
10 More Discussions You Might Find Interesting
1. UNIX for Advanced & Expert Users
Hi,
Do anyone know what's the max size of array (in awk)
can be store before hit any memory issue.
Regards (3 Replies)
Discussion started by: epall
3 Replies
2. Shell Programming and Scripting
Is there a way to find out the size of an array in sh shell script? Thanks. (1 Reply)
Discussion started by: trivektor
1 Replies
3. Solaris
hi all,
in my server there are some specific application files which are spread through out the server... these are spread in folders..sub-folders..chid folders...
please help me, how can i find the total size of these specific files in the server... (3 Replies)
Discussion started by: abhinov
3 Replies
4. Programming
i have to store a data more than 100000.
i don't know the size of the data whether it may be 100000 or 1000000.
so how can i define variable size;
example
char abc;
but i don't know the size so how can i give array size??
in one sentence
how can i give the array size dynamically so that i... (6 Replies)
Discussion started by: phani_sree
6 Replies
5. Programming
Hi All
I am simulating a problem in the production where i faced a situation.
Please find the following example program which i simulated.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char str1; (3 Replies)
Discussion started by: dhanamurthy
3 Replies
6. Shell Programming and Scripting
#!/bin/sh
##########################################################################################################
#This script is being used for AOK application for cleaning up the .out files and zip it under logs directory.
# IBM
# Created
#For pdocap201/pdoca202 .out files for AOK
#1.... (0 Replies)
Discussion started by: mridul10_crj
0 Replies
7. Shell Programming and Scripting
Hello all,
I need to do scripts total up the size in selected extension file for example motion.mov and segmentation.avi is in Label Media. For file info.doc and calc.xls in Label Document.
I need output will be like this:
count 1
Media,,2 GB
count 2
Document,,4 GB
My problem is,... (16 Replies)
Discussion started by: sheikh76
16 Replies
8. UNIX for Advanced & Expert Users
Hello,
in one default UFS filesystem we have 8K block size (bsize) and 1K fragmentsize (fsize). At this scenary I thought all "FileSytem IO" will be 8K (or greater) but never smaller than the fragment size (1K). If a UFS fragment/blocksize is allwasy several ADJACENTS sectors on disk (in a ... (4 Replies)
Discussion started by: rarino2
4 Replies
9. Programming
I want to create a form with data values in a dropdown list. The values in the dropdown list need to be generated on the fly from max, min and increment values contained in a mysql database.
Hopefully this makes sense, I really have no idea where to start :confused:
Thanks (6 Replies)
Discussion started by: barrydocks
6 Replies
10. Shell Programming and Scripting
Hi,
I would like to know how to define the size of the array in c shell scripting. (15 Replies)
Discussion started by: gopishrine
15 Replies
MALLOC(3) Library Functions Manual MALLOC(3)
NAME
malloc, free, realloc, calloc, alloca - memory allocator
SYNOPSIS
char *malloc(size)
unsigned size;
free(ptr)
char *ptr;
char *realloc(ptr, size)
char *ptr;
unsigned size;
char *calloc(nelem, elsize)
unsigned nelem, elsize;
char *alloca(size)
int size;
DESCRIPTION
Malloc and free provide a general-purpose memory allocation package. Malloc returns a pointer to a block of at least size bytes beginning
on a word boundary.
The argument to free is a pointer to a block previously allocated by malloc; this space is made available for further allocation, but its
contents are left undisturbed.
Needless to say, grave disorder will result if the space assigned by malloc is overrun or if some random number is handed to free.
Malloc maintains multiple lists of free blocks according to size, allocating space from the appropriate list. It calls sbrk (see brk(2))
to get more memory from the system when there is no suitable space already free.
Realloc changes the size of the block pointed to by ptr to size bytes and returns a pointer to the (possibly moved) block. The contents
will be unchanged up to the lesser of the new and old sizes.
In order to be compatible with older versions, realloc also works if ptr points to a block freed since the last call of malloc, realloc or
calloc; sequences of free, malloc and realloc were previously used to attempt storage compaction. This procedure is no longer recommended.
Calloc allocates space for an array of nelem elements of size elsize. The space is initialized to zeros.
Alloca allocates size bytes of space in the stack frame of the caller. This temporary space is automatically freed on return.
Each of the allocation routines returns a pointer to space suitably aligned (after possible pointer coercion) for storage of any type of
object. If the space is of pagesize or larger, the memory returned will be page-aligned.
SEE ALSO
brk(2), pagesize(2)
DIAGNOSTICS
Malloc, realloc and calloc return a null pointer (0) if there is no available memory or if the arena has been detectably corrupted by stor-
ing outside the bounds of a block. Malloc may be recompiled to check the arena very stringently on every transaction; those sites with a
source code license may check the source code to see how this can be done.
BUGS
When realloc returns 0, the block pointed to by ptr may be destroyed.
The current implementation of malloc does not always fail gracefully when system memory limits are approached. It may fail to allocate
memory when larger free blocks could be broken up, or when limits are exceeded because the size is rounded up. It is optimized for sizes
that are powers of two.
Alloca is machine dependent; its use is discouraged.
4th Berkeley Distribution May 14, 1986 MALLOC(3)